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

时间:2016-03-06 13:52:29

标签: batch-file batch-rename

我有一个包含460张图片的文件夹,每人23张,格式为:image_0001.jpgimage_0460.jpg。 什么是批处理命令,以01-01.jpg01-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
 ) 
) 

我找不到使用循环变量来做同样事情的方法。有没有办法使用循环变量还是有其他方法吗?

2 个答案:

答案 0 :(得分:2)

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

其余的只是数学问题。

答案 1 :(得分:2)

此方法使用%(模数或余数)运算符计数23个组:image=(image+1)%23部分变化image变量从0到22并重复此计数。 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"
)

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