我试图通过申请给出的答案太空炮弹到这个问题的一个体内for
-loop。
example.bat:
@echo off
copy NUL %1
echo firstLine >> %1
echo /=======================/
for /l %%x in (1,1,3) do (
echo %%x
set /p A=< %1
echo %A%
)
echo /=======================/
set /p A=< %1
echo %A%
结果start example.bat temp.txt
:
1 file(s) copied.
/ ====================== /
1个
回音关闭。
2个
回音关闭。
3
回音关闭。
/ ====================== /
第一行
为什么set /p A=< %1
在for
-loop主体中不起作用?
主要的问题是,除了循环变量外,cmd
循环执行前还会在批处理文件循环中扩展变量,因此,尽管A
在循环中进行了设置,但回显的值是进入循环之前的值(即空白) 。您可以看到,通过省略set
final之前的,已设置了该值echo
:输出将是相同的。
答案是启用“延迟扩展”并使用!A!
代替%A%
。
顺便说一下copy
,echo
文件开头的and命令是不必要的冗长写法echo firstLine > %1
。
因此,如果按以下方式进行修改,则批处理文件将按预期工作:
@echo off
SetLocal EnableDelayedExpansion
rem copy NUL %1
rem echo firstLine >> %1
echo firstLine > %1
echo /=======================/
for /l %%x in (1,1,3) do (
echo %%x
set /p A=< %1
echo !A!
)
echo /=======================/
rem set /p A=< %1
echo %A%
请注意,您将A
在循环的每个遍历中将其设置为相同的值。如果您希望每次通过都显示文件中的连续行,则需要使用其他技术。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句