要使用3位数递增重命名的批处理文件

时间:2014-03-22 18:52:34

标签: batch-file rename

这是我的情况。我有一个图像文件夹,我几乎每天更新。我希望bat文件使用相同的名称+ 3位数增量重命名。

anatomy 001.jpg
anatomy 002.jpg
anatomy 003.jpg

每次我将新文件添加到文件夹并运行批处理文件时,它都会增加增量。

这是我到目前为止所做的,从这里和那里采摘,并试图了解每个功能正在做什么(我是这个领域的新手)

@echo off
setlocal EnableDelayedExpansion
set name=Anatomy
set /a index=0
for /f "delims=" %%i in ('dir /b /a-d *.jpg') do (
set index=!index!
set /a index+=1
ren "%%~i" "%name%!index!.jpg"
)

但是我的批处理文件只增加一位数,当我再次启动它时,它再次重命名已经重命名的文件,因此anatomy002可能会变成anatomy007。

我需要一个命令,它告诉我们不要重命名已经命名的文件,或者不要重命名以“anatomy”开头的文件。我还修复了3位增量问题。可能吗 ?

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
set "name=Anatomy"
set /a index=1000000
for /f "tokens=2delims=. " %%i in ('dir /b /a-d /on "%sourcedir%\%name% *.jpg"') do (
 SET /a index=999000+1%%i
)

for /f "delims=" %%i in ('dir /b /a-d "%sourcedir%\*.jpg"^|findstr /r /i /v /c:"%name% ...\.jpg"') do (
 set /a index+=1
 ECHO ren "%sourcedir%\%%~i" "%name% !index:~-3!.jpg"
)
GOTO :EOF

我使用目录u:\sourcedir进行测试。

第一个for找到现有的name nnn.jpg文件,按名称排序。使用点和空格作为分隔符,第二个标记将是序列号。前缀为1给出一个合理的十进制数,并添加999000给出1000000 +最后一个数字。

然后再次查看目录,但过滤掉(/v)而不考虑大小写(/i)与正则表达式(/r)匹配的任何名称({{1} }})name + space + 3characters + a dot(/c:)jpg 对于找到的那些中的每一个,撞击计数器并使用指定的名称+空格+新的index.jpg中的最后3个字符重命名该文件

为了测试目的,所需的REN命令仅为\.在您确认命令正确后,将ECHO更改为ECHO REN以实际重命名文件。