条件批量重命名 (Windows XP)
Conditional batch rename (Windows XP)
我有数百个文件,其名称末尾有一个顺序索引:
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.jpg
、recipes1001.jpg
等。我做错了什么?
作为后续问题,两个 if
可以合并为一个 if
...else
吗?
要比较变量i
的值,传递给if
命令时需要展开
if !i! lss 1000 (
ren "%%a" "recipes0!i!.new"
)^
else (
ren "%%a" "recipes!i!.new"
)
我会这样做:
@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
我有数百个文件,其名称末尾有一个顺序索引:
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.jpg
、recipes1001.jpg
等。我做错了什么?
作为后续问题,两个 if
可以合并为一个 if
...else
吗?
要比较变量i
的值,传递给if
命令时需要展开
if !i! lss 1000 (
ren "%%a" "recipes0!i!.new"
)^
else (
ren "%%a" "recipes!i!.new"
)
我会这样做:
@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