只用批处理脚本重命名文件夹 [关闭] 。

问题描述 投票:0回答:1

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

原文件夹名。 图片,音乐

改为。 旧图片,旧音乐

但我不想改变该父目录下的任何文件名。

我试着用 对于

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

但是这个东西没有用... ...

请给予解决

batch-file cmd command-prompt batch-rename
1个回答
0
投票

除了循环浏览子目录外,你还需要过滤掉任何已经在前缀为 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 在这个版本中。这是为防止任何错误信息通过管道而包含的。(|)如果目标目录不存在的话。在当前的目录版本中,这并不是必要的,因为当前目录总是存在的。

© www.soinside.com 2019 - 2024. All rights reserved.