Batch file CMD.exe对变量值有预感
在我编写的批处理脚本中,变量赋值出现了奇怪的行为。下面是我可以编造的最简单的例子来重新创建这个问题。我创建了文件Batch file CMD.exe对变量值有预感,batch-file,windows-7-x64,cmd,Batch File,Windows 7 X64,Cmd,在我编写的批处理脚本中,变量赋值出现了奇怪的行为。下面是我可以编造的最简单的例子来重新创建这个问题。我创建了文件type pos.bat: @echo on FOR /R ".\" %%F IN (*.txt) DO ( echo Look: %%F set file=%%~dpF%%~nF echo %file% ) 在包含两个*.txt文件的目录中,其中一个位于子目录中: pos/ |-pos.bat |-file1.txt |dir/ |-fil
type pos.bat
:
@echo on
FOR /R ".\" %%F IN (*.txt) DO (
echo Look: %%F
set file=%%~dpF%%~nF
echo %file%
)
在包含两个*.txt文件的目录中,其中一个位于子目录中:
pos/
|-pos.bat
|-file1.txt
|dir/
|-file2.txt
我得到以下输出:
F:\pos>pos.bat
F:\pos>FOR /R ".\" %F IN (*.txt) DO (
echo Look: %F
set file=%~dpF%~nF
echo F:\pos\dir\file2
)
F:\pos>(
echo Look: F:\pos\file1.txt
set file=F:\pos\file1
echo F:\pos\dir\file2
)
Look: F:\pos\file1.txt
F:\pos\dir\file2
F:\pos>(
echo Look: F:\pos\dir\file2.txt
set file=F:\pos\dir\file2
echo F:\pos\dir\file2
)
Look: F:\pos\dir\file2.txt
F:\pos\dir\file2
在循环的第一次迭代中,%file%
的值不应该变回F:\pos\file1.txt
?此外,我还感到惊讶的是,`%file%的值在脚本调用之间应该一直保持不变。对脚本的第一次调用按照我的预期进行:
F:\pos>FOR /R ".\" %F IN (*.txt) DO (
echo Look: %F
set file=%~dpF%~nF
echo
)
F:\pos>(
echo Look: F:\pos\file1.txt
set file=F:\pos\file1
echo
)
Look: F:\pos\file1.txt
ECHO is on.
F:\pos>(
echo Look: F:\pos\dir\file2.txt
set file=F:\pos\dir\file2
echo
)
Look: F:\pos\dir\file2.txt
ECHO is on.
但所有后续调用都会给我垃圾结果。非常感谢您的帮助。您需要启用延迟扩展,然后使用
循环中变量的代码>
在文件顶部(通常)
在FOR循环中
echo !file!
这是一个关于为什么和为什么的问题
echo !file!