正则表达式重命名为文件批处理

时间:2018-01-04 19:31:13

标签: regex batch-file rename file-rename batch-rename

我想用批处理程序重命名几百个文件。 defacon让他们的号码首先出现,但我对这批次并不是很容易。 我的文件名称示例:

3705_(2x).stl
68403_(4x).stl
6525_(2x).stl
22073_(3x).stl

为:

2x-3705.stl
2x-6525.stl
3x-22073.stl
4x-68403.stl

我试过了:

@echo off
set /p d=disque: // c:
set /p c=chemin: // \Users\celes\file
cls
%d%
cd%c%
set nb = findstr /r '[0-9]+x'
set p = findstr /r '[0-9]{2,}'
ren *.stl %nb%%p%.stl
pause>nul

1 个答案:

答案 0 :(得分:2)

您可以使用此批处理文件:

@echo off
for /F "eol=| delims=" %%I in ('dir "*_(*).stl" /A-D /B 2^>nul') do for /F "tokens=1,2 delims=()_" %%A in ("%%~nI") do ECHO ren "%%I" "%%B-%%A%%~xI"
pause

外部 FOR 在后台单独的命令进程中运行命令 DIR ,以获取与模式*_(*).stl匹配的文件名列表,该列表不会更改在文件重命名操作期间。

外部 FOR 处理每个文件名,默认行为是使用水平制表符和空格将每一行拆分为标记,并通过指定空分隔符列表来禁用分隔符。

内部 FOR 循环仅处理双引号中指定的每个文件名字符串。命令 FOR 正在使用选项字符串tokens=1,2 delims=()_指示将所有括号和下划线解释为分隔符,并将文件名字符串拆分为至少两个子字符串。第一个子字符串是下划线之前的数字,它被分配给指定的循环变量A。第二个子字符串是括号之间的字符串,根据ASCII表分配给下一个循环变量,该表是循环变量B

内部 FOR 执行的命令 REN 将当前文件重命名为外部 FOR 的循环变量I中的保留使用内部 FOR 确定的两个子串的新名称。

此批处理文件在命令ren之前包含命令 ECHO ,只输出重命名命令而不是真正运行它。因此,在真正执行这些操作之前,您可以检查批处理文件并验证文件重命名操作。删除命令 ECHO 以真正重命名文件。

要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。

  • echo /?
  • for /?
  • pause /?
  • ren /?

另请阅读有关Using Command Redirection Operators的Microsoft文章,了解2>nul的说明。重定向运算符>必须使用 FOR 命令行上的插入符^进行转义,以便在执行命令之前Windows命令解释程序处理此命令行时将其解释为文字字符FOR ,它在后台启动的单独命令进程中执行嵌入式dir命令行。