仅使用批处理脚本重命名文件夹
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
。如果目标目录不存在,则包含此内容是为了防止任何错误消息通过管道 (|
)。在当前目录版本中,这不是必需的,因为当前目录始终存在。
我想用批处理脚本重命名一些文件夹名称,并在其前面添加一个特定的术语 例如
原文件夹名:图片、音乐
改为: 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
。如果目标目录不存在,则包含此内容是为了防止任何错误消息通过管道 (|
)。在当前目录版本中,这不是必需的,因为当前目录始终存在。