仅使用批处理脚本重命名文件夹

Rename only folders with batch script

我想用批处理脚本重命名一些文件夹名称,并在其前面添加一个特定的术语 例如

原文件夹名:图片、音乐

改为: old_images, old_music

但我不想更改该父目录中的任何文件名

我试着用 for

for %%A in (dir /ad *) do (ren %%A old_%%A)

但这东西没用...

请给出解决方案

除了循环遍历子目录外,您还需要过滤掉任何已经以 old_ 为前缀的目录(除非您真的想要 old_old_old_old_old_),并确保在重命名之前不存在前缀为 old_ 的任何名称。

以下两个示例对位于当前目录中的文件进行操作,当时该行是 运行、(请不要假设当前目录是批处理所在的目录文件位于)。

@For /F "EOL=| Delims=" %%I In ('Dir /B/AD ^| %__AppDir__%findstr.exe /BIV "old_"') Do @If Not Exist "old_%%I" Ren "%%I" "old_%%I"

或者,您可以省略 If 命令,如果发生重命名冲突,只需重定向任何错误消息即可。

@For /F "EOL=| Delims=" %%I In ('Dir /B/AD ^| %__AppDir__%findstr.exe /BIV "old_"') Do @Ren "%%I" "old_%%I" 2>NUL


如果您不在当前目录中解析目录,(如上),您可以直接在命令中插入目标:

@For /F "EOL=| Delims=" %%I In ('Dir /B/AD "C:\My Location" 2^>NUL ^| %__AppDir__%findstr.exe /BIV "old_"') Do @If Not Exist "C:\My Location\old_%%I" Ren "C:\My Location\%%I" "old_%%I"

虽然在这种情况下,您最好将该位置定义为变量,以使您的代码更易于修改和作为模板重用。

@Set "var=C:\My Location"
@For /F "EOL=| Delims=" %%I In ('Dir /B/AD "%var%" 2^>NUL ^| %__AppDir__%findstr.exe /BIV "old_"') Do @If Not Exist "%var%\old_%%I" Ren "%var%\%%I" "old_%%I"

您可能会注意到此版本中有一个额外的 2>NUL。如果目标目录不存在,则包含此内容是为了防止任何错误消息通过管道 (|)。在当前目录版本中,这不是必需的,因为当前目录始终存在。