这是我的情况。我有一个图像文件夹,我几乎每天更新。我希望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位增量问题。可能吗 ?
答案 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
以实际重命名文件。