DOS批量重命名文件

时间:2012-11-06 17:47:38

标签: batch-file dos file-rename zero-pad

我有一个名为string_int_int_int_string.extension的大型文件集,并希望在第二个int中将左零填充重命名为7位数。

示例:将stringA_1_2_3_stringB.jpg重命名为stringA_1_0000002_3_stringB.jpg

我看过一些有用的帖子hereherehere,但还没有完成。

这是我到目前为止所做的事情(当然没有工作):

dir /b *.* >temp.txt

for /f "tokens=%%1,%%2,%%3,%%4,%%5 delims=_" %x in (temp.txt) do (
    setlocal enabledelayedexpansion
    set PAD=000000%%k
    set PAD=!PAD:~7!
    ren "%%i_%%j_%%k_%%l_%%m" %%i_%%j_%PAD%_%%l_%%m
)

我特别希望使用批处理文件,而不是其他语言或工具。 (我知道各种重命名工具。)

欢迎任何帮助!

2 个答案:

答案 0 :(得分:2)

setlocal EnableDelayedExpansion
dir /b *.* >temp.txt
for /F "tokens=1-5 delims=_" %%a in (temp.txt) do (
   set PAD=000000%%c
   set PAD=!PAD:~-7!
   ren "%%a_%%b_%%c_%%d_%%e"  "%%a_%%b_!PAD!_%%d_%%e"
)

答案 1 :(得分:0)

我使用FINDSTR过滤掉与指定模式不匹配的文件名。总共需要4个令牌 - 前3个,后面是文件名的其余部分。

@echo off
setlocal disableDelayedExpansion
for /f "tokens=1,2,3* delims=_" %%A in (
  'dir /b /a-d * ^|findstr /r "^[^_]*_[0-9]*_[0-9]*_[0-9]*_[^_]"'
) do (
  set "mid=%%C"
  set "pad=0000000%%C"
  set "start=%%A_%%B"
  set "end=%%D"
  setlocal enableDelayedExpansion
  echo ren "!start!_!mid!_!end!" "!start!_!pad:~-7!_!end!"
  endlocal
)