Batch file 使用.bat重命名多个文件
我一直在Windows 7中寻找一个.bat文件,该文件给定一个名称和一个文件目录,将该目录中的所有文件重命名为用户传递的名称,并连接为一个从0到9的数字。 例如: 假设我有一个包含两个文件a.txt和b.txt的目录,我想将它们的名称更改为documentX.txt(X是一个从0到9的数字),因此在最后脚本会将名称更改为document1.txt和document2.txt 我尝试过这样的事情,但没有成功:Batch file 使用.bat重命名多个文件,batch-file,Batch File,我一直在Windows 7中寻找一个.bat文件,该文件给定一个名称和一个文件目录,将该目录中的所有文件重命名为用户传递的名称,并连接为一个从0到9的数字。 例如: 假设我有一个包含两个文件a.txt和b.txt的目录,我想将它们的名称更改为documentX.txt(X是一个从0到9的数字),因此在最后脚本会将名称更改为document1.txt和document2.txt 我尝试过这样的事情,但没有成功: @echo off @set a=1 @set pref=ho
@echo off
@set a=1
@set pref=hola
for /D %%f in (C:\*.txt)
do
rename *.txt %pref%%a%
@set /A a = %a%+1
FOR命令不能跨越多行,除非使用括号或行继续符
^
。第一个圆括号必须与IN位于同一行,第二个圆括号必须与DO位于同一行
不能在带括号的代码块中使用普通扩展,因为该代码块也会设置值,因为扩展发生在解析时,而整个代码块会立即解析。因此,该值将是您设置它之前存在的值!解决方法是使用延迟扩展。这在执行该行时发生。必须使用setlocal enableDelayedExpansion
启用它
延迟扩展会导致问题,因为
在文件名中有效,如果变量扩展包含,则它将被损坏代码>启用延迟扩展时。解决方案是在循环中打开和关闭延迟扩展
您想要一个没有任何选项的简单FOR。/D
选项查找目录而不是文件
您不需要在SET/a
语句中展开数值变量
最后一件事-使用ECHO OFF
后无需使用@
@echo off
setlocal disableDelayedExpansion
set "n=0"
set "pref=document"
for %%F in (c:\*.txt) do (
set "file=%%F"
set /a n+=1
setlocal enableDelayedExpansion
ren "!file!" "%pref%!n!.txt"
endlocal
)
有一种更简单的方法来完成这项任务。使用DIR/B
列出所有.txt
文件,并将结果传送到FINSTDR/N“^”
。FINDSTR将匹配所有文件,并在每个值前面加上一个序号,后跟一个冒号。使用FOR/F将结果解析为数字和文件名,以便可以重命名
@echo off
setlocal
set "pref=document"
for /f "tokens=1* delims=:" %%A in ('dir /b /a-d *.txt^|findstr /n "^"') do (
ren "%%B" "%pref%%%A.txt"
)
FOR命令不能跨越多行,除非使用括号或行继续符^
。第一个圆括号必须与IN位于同一行,第二个圆括号必须与DO位于同一行
不能在带括号的代码块中使用普通扩展,因为该代码块也会设置值,因为扩展发生在解析时,而整个代码块会立即解析。因此,该值将是您设置它之前存在的值!解决方法是使用延迟扩展。这在执行该行时发生。必须使用setlocal enableDelayedExpansion
启用它
延迟扩展会导致问题,因为
在文件名中有效,如果变量扩展包含,则它将被损坏代码>启用延迟扩展时。解决方案是在循环中打开和关闭延迟扩展
您想要一个没有任何选项的简单FOR。/D
选项查找目录而不是文件
您不需要在SET/a
语句中展开数值变量
最后一件事-使用ECHO OFF
后无需使用@
@echo off
setlocal disableDelayedExpansion
set "n=0"
set "pref=document"
for %%F in (c:\*.txt) do (
set "file=%%F"
set /a n+=1
setlocal enableDelayedExpansion
ren "!file!" "%pref%!n!.txt"
endlocal
)
有一种更简单的方法来完成这项任务。使用DIR/B
列出所有.txt
文件,并将结果传送到FINSTDR/N“^”
。FINDSTR将匹配所有文件,并在每个值前面加上一个序号,后跟一个冒号。使用FOR/F将结果解析为数字和文件名,以便可以重命名
@echo off
setlocal
set "pref=document"
for /f "tokens=1* delims=:" %%A in ('dir /b /a-d *.txt^|findstr /n "^"') do (
ren "%%B" "%pref%%%A.txt"
)
如果您的问题得到了满意的回答,那么您应该通过单击答案左上角附近的复选标记来接受答案。这样做会让其他人知道问题已经得到了回答,它会给你2点声誉,并给回答提供者15分。只能接受一个答案。一旦你达到15个代表点,你也将有权投票决定答案。只要你觉得有用,你就可以投更多的答案,甚至是对别人问题的答案。向上投票给答案提供者10分。如果你的问题得到满意的回答,那么你应该点击答案左上角附近的复选标记接受答案。这样做会让其他人知道问题已经得到了回答,它会给你2点声誉,并给回答提供者15分。只能接受一个答案。一旦你达到15个代表点,你也将有权投票决定答案。只要你觉得有用,你就可以投更多的答案,甚至是对别人问题的答案。向上投票给答案提供者10分。