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

Regex Rename with batch for files

我想用批处理程序重命名几百个文件。 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

您可以使用这个批处理文件:

@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 的下划线之前的数字。第二个子串是括号之间的字符串,根据ASCIItable赋值给下一个循环变量,即循环变量B.

内层FOR执行的命令REN将当前文件重命名为hold in循环变量I外层FOR 使用由内部 FOR.

确定的两个子字符串生成新名称

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

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

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

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