用批处理文件编辑图像数据库的名称

问题描述:

我有一个包含460个图像的文件夹,每个人有23个,格式为:image_0001.jpgimage_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 
) 
) 

我不能找到一种方法,使用循环变量来这样做。有没有办法使用循环变量或有另一种方式?

+0

你说''一个文件夹“'但是然后使用递归'/ r'。这是单个文件夹还是文件夹树? – foxidrive

@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 +一个有效数字计算,然后使用子字符串。

其余的只是一个数学问题。

+0

非常感谢您的回复。它为我工作! –

此方法使用%(模数或余数)运算符以23组为单位进行计数:image=(image+1)%23部分变量从0到22的变量image并重复此计数。 imgaux=101+imageimgaux从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" 
) 

请注意,在这种方法中,人数不需要事先知道。

+0

感谢您的回复。我正在使用您的脚本从不同的数据库中删除某些文件。你如何设法在你的方法中使用01而不是1?我对批处理文件很陌生,所以很抱歉提出这样详细的问题。 –

+0

当'image = 0'时,然后'set/A imgaux = 101 + image'指定'101'给imgaux。子字符串提取'!imgaux:〜1!'从_second_字符开始(子字符串提取中的字符计数从零开始),因此使用'01'... – Aacini

+0

非常感谢您的明确。 –