通过批处理脚本重命名多个文件

时间:2012-12-27 12:41:34

标签: batch-file batch-processing dos batch-rename

我有这部分批处理脚本正在执行以下操作:

- 在每个子文件夹中重命名文件:'jpg,gif,png'到'海报1','海报2','海报3'等等......(没有变化在扩展名上)

set i=0
for %%b in (*.jpg *.gif *.png) do (
  set /A i+=1
   ren "%%b" "Poster !i!%%~Xb"
  echo File "%%b" renamed to "Poster !i!%%~Xb"
)

rem PATCH修复以前的FOR命令中的错误( PLEASE IGNORE: 在prev.FOR命令中有一个错误,它将一个文件重命名两次,如果只有两个文件夹中的图像文件 ):

if !i! neq 0 if not exist "Poster 1.*" (
  ren "Poster !i!.*" "Poster 1.*"
  echo ...and renamed back to "Poster 1"
)

!!!!!我需要的是:!!!!!
- 如果文件夹中只有一个文件,我需要添加一个要求,将其重命名为“海报”,因为没有它,此脚本会将其重命名为“海报1” “

谢谢!

2 个答案:

答案 0 :(得分:1)

只是一个逻辑解决方案,在do循环之后,你可以再次检查'i'的值,如果它是1,那么你可以再次执行重命名操作[将Poster1重命名为Poster]。希望这有帮助

答案 1 :(得分:0)

在补丁if命令之后:

if !i! equ 1 ren "Poster 1.*" "Poster.*"

编辑

如果你在补丁if命令之后插入前一行(如我所说),最终的代码就是:

set i=0
for %%b in (*.jpg *.gif *.png) do (
   set /A i+=1
   ren "%%b" "Poster !i!%%~Xb"
   echo File "%%b" renamed to "Poster !i!%%~Xb"
)
rem PATCH to fix a bug in previous FOR command:
if !i! neq 0 if not exist "Poster 1.*" (
   ren "Poster !i!.*" "Poster 1.*"
   echo ...and renamed back to "Poster 1"
)
REM NEW COMMAND TO RENAME THE UNIQUE FILE TO "Poster":
if !i! equ 1 ren "Poster 1.*" "Poster.*"

安东尼奥