批量重命名文件条件格式

时间:2014-02-03 15:17:28

标签: batch-file conditional-statements

我需要重命名pdf文件,以便文件名具有一定的长度。 inpu文件名将为123456_1.pdf123_25.pdf 输出应为0000123456001.pdf000000013025.pdf。 在_之前,应该用零填充数字直到10个字符,并且在_填充到3个字符之后。 _之前和之后的数字是变量。这些是customer_account数字。 提前谢谢

2 个答案:

答案 0 :(得分:1)

重要的是只重命名符合起始模板的名称。

DIR / B列出所有pdf文件,FINDSTR仅保留_之前和之后所有数字的文件。 IF语句确保第一个数字不超过10位数,第二个数字不超过3位数。

最后,使用经典技术将数字填充到给定长度。使用一串零前缀每个数字,然后使用子字符串操作来保留正确的右侧数量。

@echo off
setlocal enableDelayedExpansion
for /f "tokens=1,2 delims=_." %%A in (
  'dir /b /a-d *.pdf^|findstr /rix "[0-9]*_[0-9]*\.pdf"'
) do (
  set "part1=%%A"
  set "part2=%%B"
  if "!part1:~0,10!" equ "!part1!" if "!part2:~0,3!" equ "!part2!" (
    set "part1=0000000000%%A"
    set "part2=000%%B"
    ren "%%A_%%B.pdf" "!part1:~-10!!part2:~-3!.pdf"
  )
)

下面是一个完全不同的方法,使用REPL.BAT - a hybrid JScript/batch utility执行正则表达式搜索并替换stdin并将结果写入stdout。该实用程序是纯脚本,可​​以从XP开始在任何现代Windows机器上本机运行。完整文档内置于该实用程序中。 REPL.BAT应放在PATH中的某个位置。

FOR IN()子句使用行继续以提高可读性。它的工作原理与连续一行一样。

DIR / B只列出所有pdf文件。

第一个REPL仅匹配由1-10个数字组成的名称,后跟_,后跟1-3个数字,后跟.pdf。它按如下方式重新格式化名称:originalName:000000000FirstNumber_00SecondNumber.pdf

第二个REPL保留原始名称不变,然后重新格式化新名称,仅保留第一个数字的最右边10个数字和第二个数字的最右边3个数字加上扩展名。

FOR / F将每个结果解析为原始名称和新名称,以便可以重命名每个文件。

@echo off
for /f "tokens=1,2 delims=:" %%A in (
  'dir /b *.pdf^|^
   repl "^([0-9]{1,10})_([0-9]{1,3})\.pdf$" "$&:000000000$1_00$2.pdf" ai^|^
   repl "(.*:).*(.{10})_.*(.{3}\.pdf)" "$1$2$3"'
) do ren "%%A" "%%B"

答案 1 :(得分:1)

试试这个:

@echo off
setlocal enabledelayedexpansion

pushd c:\temp
for /f "tokens=1,2 delims=_." %%a in ('dir /b *.pdf') do (
  set num1=0000000000%%a
  set num1=!num1:~-10!
  set num2=000%%b
  set num2=!num2:~-3!
  echo ren %%a_%%b.pdf !num1!!num2!.pdf
)

删除回显以进行实际重命名。

相关问题