用于重命名多个文件夹的.bat文件

时间:2012-02-14 02:59:27

标签: windows batch-file cmd

我正在尝试编写批处理脚本来重命名多个文件夹。 我想做类似下面的事情: 通过在文件夹名称

的末尾附加我的名字,重命名“Workspace”文件夹下的所有文件夹

例如,重命名:

Workspace/RiskFolder
Workspace/PNLFolder

为:

Workspace/RiskFolder_myname
Workspace/PNLFolder_myname

这可能吗?

5 个答案:

答案 0 :(得分:15)

您可以使用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的以下参考资料:

答案 1 :(得分:3)

无需批处理文件。这将从命令行

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

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

答案 2 :(得分:3)

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

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

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

1)接受包含要重命名的子文件夹的文件夹名称(在您的示例中,它是Workspace)。

2)接受要附加到末尾的字符串(在您的示例中,它是您的名字)。

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

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

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

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

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

为了使我们能够发出要评估的dos命令,我们需要使用/ F选项。选项字符串是: -

"usebackq tokens=*"
  • usebackq指定backquouted字符串是要评估的命令。(注意,dir命令包含在反引号(`)中)
  • tokens = *表示将每一行视为单个令牌并传递给命令

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

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

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

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

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

for /?

有关其他用法示例,请参阅Loopy loops: The DOS way

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

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