我想用批处理脚本重命名一些文件夹,并在前面加上一个特定的术语,如
原文件夹名。 图片,音乐
改为。 旧图片,旧音乐
但我不想改变该父目录下的任何文件名。
我试着用 对于
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
在这个版本中。这是为防止任何错误信息通过管道而包含的。(|
)如果目标目录不存在的话。在当前的目录版本中,这并不是必要的,因为当前目录总是存在的。