用批处理文件编辑图像数据库的名称
我有一个包含460个图像的文件夹,每个人有23个,格式为:image_0001.jpg
到image_0460.jpg
。 什么是批处理命令,以01-01.jpg
的形式将它们重命名为01-23.jpg
,因此整个数据库的重命名为20-23.jpg
? [编辑] 我碰到:用批处理文件编辑图像数据库的名称
@echo off & setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('dir /b *') do (
if not "%%~nxi"=="%~nx0" (
ren "%%i" "!a!"
set /a a+=1
)
)
我不能找到一种方法,使用循环变量来这样做。有没有办法使用循环变量或有另一种方式?
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET /a filenum=10000
FOR /L %%a IN (1,1,20) DO (
FOR /L %%b IN (1,1,23) DO (
SET /a filenum+=1
SET /a newnum=10000+%%b+(%%a*100^)
ECHO(REN "%sourcedir%\image_!filenum:~-4!.jpg" "!newnum:~1,2!-!newnum:~-2!".jpg
)
)
GOTO :EOF
您需要更改sourcedir
的设置以适应您的情况。
为了测试目的,所需的REN命令仅仅是ECHO
。 验证命令是否正确后,将ECHO(REN
更改为REN
以实际重命名文件。
该问题是前导零的一个,因此调用delayedexpansion并使用10000 +一个有效数字计算,然后使用子字符串。
其余的只是一个数学问题。
非常感谢您的回复。它为我工作! –
此方法使用%
(模数或余数)运算符以23组为单位进行计数:image=(image+1)%23
部分变量从0到22的变量image
并重复此计数。 imgaux=101+image
将imgaux
从101更改为123,并且仅在ren
命令中使用最后两位数字。最后,person+=!image
增量person
变量每次image
为零。
@echo off
setlocal EnableDelayedExpansion
set /A person=100, image=-1
for %%a in (*.jpg) do (
set /A "image=(image+1)%%23, imgaux=101+image, person+=^!image"
ECHO ren "%%a" "!person:~1!-!imgaux:~1!.jpg"
)
请注意,在这种方法中,人数不需要事先知道。
感谢您的回复。我正在使用您的脚本从不同的数据库中删除某些文件。你如何设法在你的方法中使用01而不是1?我对批处理文件很陌生,所以很抱歉提出这样详细的问题。 –
当'image = 0'时,然后'set/A imgaux = 101 + image'指定'101'给imgaux。子字符串提取'!imgaux:〜1!'从_second_字符开始(子字符串提取中的字符计数从零开始),因此使用'01'... – Aacini
非常感谢您的明确。 –
你说''一个文件夹“'但是然后使用递归'/ r'。这是单个文件夹还是文件夹树? – foxidrive