1

我有一些文件的名字就像

Image 1.jpg
Image 2.jpg
Image 10.jpg
Image 11.jpg
Image 20.jpg

它们按照我希望它们出现的确切顺序编号,但是当我执行dir

Image 1.jpg
Image 10.jpg
Image 11.jpg
Image 2.jpg
Image 20.jpg

如果这些应该是动画中的帧,那么您的动画基本上会出错。

我想用 0 填充数字。字符串的格式始终相同

PREFIX NUMBER.EXT

如何填充文件名以便获得

Image 0001.jpg
Image 0002.jpg
Image 0010.jpg
Image 0011.jpg
Image 0020.jpg

这是我到目前为止所做的

echo off
Setlocal EnableDelayedExpansion

rem note the extra space at the end of "Image "
set prefix=Image 
for %%F in (*.jpg) do (
  set a=%%F
  rem // strip the prefix
  set a=!a:%prefix%=!
  echo !a!
)

这将删除前缀。然后我会用前导字符 0 填充生成的文件名,然后重命名文件。

4

1 回答 1

2

您可以像这样隔离数字,而不是进行前缀替换:(删除echo以启用重命名命令)

@echo off
setlocal ENABLEDELAYEDEXPANSION

for %%A in (*.jpg) do (
    for /f "tokens=1-3 delims=. " %%F in ("%%A") do (
       set /a a=%%G
       set zeros=
       if !a! LSS 1000 set zeros=0
       if !a! LSS 100 set zeros=00
       if !a! LSS 10 set zeros=000
       set "name=%%F !zeros!!a!.%%H"
       echo ren "%%A" "!name!"
    )
)

endlocal

Usingset /a进行数字转换,然后您可以使用扩展比较器LSS来比较数字并创建相关的填充,最后使用其标记重新组合文件名。这个特定的片段不是通用的——它只有在你的前缀没有空格或点并且名称只有三个主要标记时才有效。但你明白了。

于 2013-08-11T23:05:18.200 回答