我正在尝试编写一个脚本来执行以下操作,但我没有 Windows 编码经验。
我正在努力实现以下目标:
我有一个包含多个图像的文件夹,我想用这样的序列重命名它
2012.000.value
如果值是我希望它能够在脚本运行之前输入一个值,并且第一个图像将是该数字,然后它将计数重命名具有该值的图像文件夹。
有些图像可能有一个名为的文件名Original
,我想保留该值,但也将上述序列插入文件名。
图像将是.jpg
我正在尝试编写一个脚本来执行以下操作,但我没有 Windows 编码经验。
我正在努力实现以下目标:
我有一个包含多个图像的文件夹,我想用这样的序列重命名它
2012.000.value
如果值是我希望它能够在脚本运行之前输入一个值,并且第一个图像将是该数字,然后它将计数重命名具有该值的图像文件夹。
有些图像可能有一个名为的文件名Original
,我想保留该值,但也将上述序列插入文件名。
图像将是.jpg
@echo off
setlocal enabledelayedexpansion
set count=0
for /d %%x in (%date:~-4%.000.???) do (
for /f "tokens=3 delims=." %%y in ("%%x") do (
set count=%%y
for %%z in (%%x\*.jpg) do (
ren %%~dpnxz !count!.jpg
set /a count=count+1
)
)
)
endlocal
上面的代码假定目录格式为%CurrentYear%.000.???
. 如果您想要多年,您将需要不同的代码。
编辑:此代码不会输出000.jpg
or 001.jpg
,它将输出0.jpg
or 1.jpg
。底部的代码将处理这个问题。
此外,它将完全删除原始文件名,###.jpg
并且可以使用任何值。如果您希望像这样保留原始文件名,请将行#-FileName.jpg
更改ren
为:
ren %%~dpnxz !count!-%%~nz.jpg
代码不会对文件进行排序,但会按照创建它们的顺序处理它们。如果您希望它们按字母顺序排列,则将该for %%z in (%%x\*.jpg) do (
行更改为:
for /f "tokens=*" %%z in ('dir /o:n %%x\*.jpg') do (
编辑:此代码将输出长度一致的数字,受用户输入限制。
要使用此代码,您需要向它传递您希望最大数量为多少个字符。所以...
IMG 2
...可以将文件重命名00.jpg
为99.jpg
和...
IMG 4
...可以将文件从 重命名0000.jpg
为9999.jpg
.
IMG.BAT
@echo off
setlocal enabledelayedexpansion
:: Set how many characters the number can be. IE 00 = 2, 0000 = 4
set places=%1
set count=0
set zeros=
for /l %%x in (1,1,%places%) do set zeros=!zeros!0
for /d %%x in (%date:~-4%.000.???) do (
for /f "tokens=3 delims=." %%y in ("%%x") do (
set count=%%y
for %%z in (%%x\*.jpg) do (
:: Make give !count! leading 0's if nessicary
set count=%zeros%!count!
:: Trim !count! down to a 4 digit number
set count=!count:~-%places%!
ren %%~dpnxz !count!.jpg
:: Trim ALL 0's on the left to avoid calculation problems.
set /a n=places-1
for /l %%a in (0,1,!places!) do if "!count:~0,1!"=="0" set count=!count:~1!
set /a count=count+1
)
)
)
endlocal
我更喜欢这种方法,因为 Windows 资源管理器通常按字母顺序对文件进行排序,所以这将是1.jpg
2.jpg
3.jpg
10.jpg
20.jpg
1.jpg
10.jpg
2.jpg
20.jpg
3.jpg
但是,如果这些数字固定在 3 个字符宽度并带有前导 0,则它们的字母顺序将是:
001.jpg
002.jpg
003.jpg
010.jpg
020.jpg