批量重命名文件如何按文件名顺序循环?

时间:2014-01-31 21:27:34

标签: windows batch-file for-loop file-rename

我有一堆名为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

2 个答案:

答案 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),并使用这个数字来重命名文件。