在我编写的批处理脚本中,我在变量赋值中遇到了奇怪的行为。我可以编造的最简单的例子来重新创建问题如下。我创建了文件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.
但是所有后续调用都给了我垃圾结果。任何帮助是极大的赞赏。