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