条件批量重命名(Windows XP)

时间:2017-05-25 16:51:49

标签: batch-file if-statement windows-xp batch-rename

我有几百个文件,其名称最后有一个顺序索引:

recipes0001.jpg
recipes0002.jpg
...
recipes0283.jpg

我需要重命名它们,以便索引从976开始(不是1),当索引达到1000时,前导0变为'1'

recipes0976.jpg
recipes0977.jpg
...
recipes1000.jpg
recipes1001.jpg
....

我已经编写了这个批处理代码(来自here的修改后的答案):

@echo off
setlocal EnableDelayedExpansion
set i=975
for %%a in (*.jpg) do (
    set /a i+=1
    if i lss 1000 ren "%%a" "recipes0!i!.new"
    if i geq 1000 ren "%%a" "recipes!i!.new"
)
ren *.new *.jpg

似乎代码总是运行没有前导0的部分,因为我不断获得recipes976.jpgrecipes1001.jpg等。我做错了什么?

作为后续问题,这两个if可以合并为一个if ...... else吗?

2 个答案:

答案 0 :(得分:2)

这是我这样做的方式:

@echo off
setlocal EnableDelayedExpansion
set i=10975
for %%a in (*.jpg) do (
    set /a i+=1
    ren "%%a" "recipes!i:~1!.new"
)
ren *.new *.jpg

答案 1 :(得分:1)

要比较变量i的值,需要在将其传递给if命令时展开它。

if !i! lss 1000 (
  ren "%%a" "recipes0!i!.new"
)^
else (
  ren "%%a" "recipes!i!.new"
)