我有一堆名为IMG_0001,IMG_0002等的jpg文件。问题是我必须删除其中的几个,所以我需要重命名文件以填补空白。实质上,
IMG_0001,IMG_0002,IMG_0004,IMG_0006
重命名
IMG_0001,IMG_0002,IMG_0003,IMG_0004。
因此填补了我删除的文件造成的空白。但是,我写这样做的bat文件有时会乱序乱丢文件,因此最初的IMG_0001会变成IMG_0002,而IMG_0003会变成IMG_0001。如何确保我的bat文件按名称顺序循环遍历文件?
这是我的蝙蝠档案:
@echo off
set i=1
set y=0000
for %%f in (*.jpg) do call :renameit "%%f"
goto done
:renameit
set x=%y%%i%
ren %1 IMG_%x:~-4%.jpg
set /A i+=1
:done
答案 0 :(得分:0)
我不认为FOR支持自己的排序,但是DIR使用/on
(“按名称排序”)开关。所以,尝试用这个替换你的FOR循环:
for /f "tokens=*" %%f in ('dir /b /on *.jpg') do call :renameit "%%f"
答案 1 :(得分:0)
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "tokens=1,* delims=:" %%a in ('dir /a-d /on /b "IMG_*.jpg"^|findstr /n "^"') do (
set /a "n=%%a+10000"
ren "%%b" "IMG_!n:~-4!.jpg"
)
这只是使用findstr来计算检索到的文件列表(每行的格式为:filename),并使用这个数字来重命名文件。