我正在尝试重命名目录中的所有xml文件。我尝试了以下方法:
@echo off & setlocal EnableDelayedExpansion
set a=1
for /f "delims=" %%i in ('/PolicyDL/*.xml') do (
set "name=%%F"
ren "!name!" "!a!.xml"
set /a a+=1
)
但是,我收到以下错误:
The System Cannot find the Path Specified.
PolicyDL是与脚本位于同一目录的目录。
请帮助!
答案 0 :(得分:0)
这应该做到:
@echo off
setlocal enableDelayedExpansion
set a=1
for %%F in ("PolicyDL\*.xml") do (
set "name=%%F"
ren "!name!" "!a!.xml"
set /a a+=1
)
我认为它只是想要\
而不是/
,我将其更改为双引号以包装路径/文件。
答案 1 :(得分:0)
有一些问题:
\
,/
通常表示命令选项; PolicyDL
是当前目录的子目录;如果要指向批处理文件所在的目录,请在下面的代码中将前缀.\
替换为%~dp0
。for /F
尝试将''
之间的部分作为命令执行;我建议在这里使用dir /B /A:-D
; (相反,您可以使用不带for
的普通/F
循环,但是在这种特殊情况下,某些文件可能会尝试重命名两次,因为for
不会列举整个匹配文件集在开始处理它们之前...)dir
进行某种排序,例如/O:N
按名称进行排序,或/O:D
按年龄进行排序,例如); for
之类的%%i
元变量的过程中启用延迟扩展会引起感叹号的问题;切换延迟扩展,以便仅在确实需要时才启用; 这是我的编码建议:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set /A "a=1"
for /F "delims=" %%i in ('dir /B /A:-D /O:N ".\PolicyDL\*.xml"') do (
set "name=%%F"
setlocal EnableDelayedExpansion
ren "!name!" "!a!.xml"
endlocal
set /A "a+=1"
)