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

Edit names of image database with batch files

我有一个包含 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
 ) 
) 

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

@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 命令仅 ECHOed 用于测试目的。 确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

问题是前导零之一,因此调用 delayedexpansion 并使用 10000+ 有效数字进行计算,然后是子字符串。

剩下的就是数学题了。

此方法使用 %(模数或余数)运算符以 23 为一组进行计数:image=(image+1)%23 部分将 image 变量从 0 变为 22 并重复此计数。 imgaux=101+image imgaux 从 101 到 123 不等,ren 命令中仅使用最后两位数字。最后,每次 image 为零时 person+=!image 递增 person 变量。

@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"
)

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