.bat文件重命名多个文件夹

我正在尝试编写批处理脚本来重命名多个文件夹。 我想要做如下的事情:重命名所有文件夹下的“工作区”文件夹通过追加我的名字在文件夹名称的末尾

例如,重命名:

Workspace/RiskFolder Workspace/PNLFolder 

至:

 Workspace/RiskFolder_myname Workspace/PNLFolder_myname 

这可能吗?

您可以使用for循环遍历每个目录并重命名它,如下所示:

 for /D %%f in (C:\path\to\Workspace\*) do rename "%%f" "%%~nxf_myname" 

我在Windows 7上测试了这个功能,但至少应该和Windows XP一样。

这样做是这样的:对于路径中的每个目录(括号内),将目录名称分配给变量%%f ,然后将目录%%f重命名为所需格式的名称(带有你的名字)。 %%f保存了完整的路径名,对于rename命令的第一个参数来说是很好的,但是对于第二个参数,我们只需要文件名+扩展名,因此〜nx修饰符被添加到我们的变量名中。

顺便说一句,当在命令行(而不是批处理文件的一部分)上使用这个for循环时,只需要使用一个%而不是%%作为变量名。 例如, for %f in...而不是以上。

有关详细信息,请参阅Microsoft的以下参考资料:

您可以在批处理文件中使用以下命令: –

 for /F "usebackq tokens=*" %%a in (`dir /ad /b %1`) do ren %1\%%a %%a%2 

这是DOS for'命令,它对给定的项目集进行迭代,并且对于集合中的每个元素执行给定的操作。 对于给定的要求,我们需要做到以下几点:

1)接受包含要重命名的子文件夹的文件夹的名称(在你的例子中,它是工作区)。

2)接受字符串追加到最后(在你的例子中,这是你的名字)。

3)列出文件夹中的子文件夹的名称。

4)通过将字符串附加到原始名称来重命名。

让我们看看这个命令是如何实现的。 这里使用的'for'命令的格式是: –

 for /F ["options"] %variable IN (`command`) do command [command-parameters] 

这里的命令假设所需的父目录名称和要附加的字符串作为命令行参数传递。 这些由%1和%2(第一和第二参数)表示。

为了使我们能够发出一个dos命令来进行评估,我们需要使用/ F选项。 选项字符串是: –

 "usebackq tokens=*" 
  • usebackq指定反向查询的字符串是要评估的命令(请注意,dir命令是反引号(`))
  • 令牌= *意味着将每一行视为单个令牌并传递给命令

要列出父目录中的子目录,我们使用以下命令: –

 dir /ad /b %1 
  • / ad仅显示目录(忽略文件)
  • / b以裸格式显示,即只返回名称,日期,时间和其他信息不是。
  • %1是引用父目录的命令行变量。
  • %% a是在每次迭代中接收子目录名称的变量。 由于我们在批处理文件中使用了双百分比符号,否则只需要一个百分号(如%a)

最后,我们指定要执行的操作:

 ren %1\%%a %%a%2 
  • %1 \ %% a构造了子目录的绝对路径
  • %% a%2将第二个命令行参数附加到原始名称

有关命令的更多信息,请在命令提示符下键入以下内容: –

 for /? 

有关另一个用法示例,请参阅Loopy循环:DOS方式

不需要批处理文件。 这将从命令行工作

 for /d %D in ("Workspace\*") do ren "%D" "%~nxD_myName" 

如果您使用批处理文件,则%D必须变为%%D

如果不需要使用批处理文件执行文件夹/文件重命名,则还可以使用Windows批量重命名实用程序。 检查这个: http : //www.bulkrenameutility.co.uk/Download.php

 For /D %%f in (*) do rename "%%f" "%%fWhatEverNameYouLike" pause 

暂停就是看到它! 做一个cmd,并把它放在你要重命名所有子文件夹的文件夹! 他们将重命名为每个文件夹名称,再加上WhatEverNameYouLike