用0填充文件名中的数字

时间:2013-08-11 22:33:52

标签: batch-file

我有一些名字就像

的文件
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,然后重命名该文件。

1 个答案:

答案 0 :(得分: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

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