使用批处理文件编辑图像数据库的名称
Edit names of image database with batch files
我有一个包含 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
ed 用于测试目的。 确认命令正确后,将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"
)
请注意,在此方法中,不需要事先知道人数。
我有一个包含 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
ed 用于测试目的。 确认命令正确后,将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"
)
请注意,在此方法中,不需要事先知道人数。