我想用批处理程序重命名几百个文件。 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
。第二个子串是括号之间的字符串,根据ASCII表分配给下一个循环变量,B
表是循环变量I
。
由内部FOR执行的命令REN使用由内部FOR确定的两个子串将当前文件重命名为外部FOR的循环变量ren
中的保持为新名称。
此批处理文件在命令echo /?
之前包含命令ECHO,只输出重命名命令而不是真正运行它。因此,在真正执行这些操作之前,您可以检查批处理文件并验证文件重命名操作。删除命令ECHO以真正重命名文件。
要了解使用的命令及其工作方式,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
for /?
pause /?
ren /?
另请阅读有关2>nul
的Microsoft文章,了解>
的解释。重定向运算符^
必须在FOR命令行上使用插入符号dir
进行转义,以便在执行命令FOR之前在Windows命令解释程序处理此命令行时将其解释为文字字符,该命令在后台启动的单独命令进程中执行嵌入式qazxswpoi命令行。