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

问题描述 投票:0回答:1

我想用批处理程序重命名几百个文件。 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
regex batch-file rename file-rename batch-rename
1个回答
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表是循环变量I

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

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

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

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

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.