这看起来应该相当简单,但我在 DOS 中使用 FOR 循环来正确报告它正在评估的当前项目时遇到困难。
我有一个简单的 DOS 批处理文件,它循环遍历目录中的所有文件并重命名它们。假设我的目录包含以下文件:
File1.txt
File2.txt
File3.txt
我想从每个文件中删除 TXT 扩展名。所以我的批处理命令看起来像这样:
@回声关闭
for %%F in ("*.txt") do (
echo %%F
set tmpFile=%%F
echo %tmpFile%
set newFile=%tmpFile:~0,-4%.xml
echo %newFile%
)
我的预期输出是:
File1.txt
File1.txt
File1.xml
File2.txt
File2.txt
File2.xml
File3.txt
File3.txt
File3.xml
相反,输出是:
File1.txt
File3.txt
File3.xml
File2.txt
File3.txt
File3.xml
File3.txt
File3.txt
File3.xml
就好像将 %%F 设置为变量总是使用集合中的最后一个文件。
难道我做错了什么?请注意,我知道有更好的方法来简单地更改扩展名。我完成的批处理文件将执行更多操作,但我似乎无法完成这个初始步骤。
这是因为您正在设置和访问变量for
loop.
您需要使用延迟扩展来访问它们,使用!
的而不是%
's.
setlocal enabledelayedexpansion
for %%F in ("*.txt") do (
echo %%F
set tmpFile=%%F
echo !tmpFile!
set newFile=!tmpFile:~0,-4!.xml
echo !newFile!
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)