为什么在批处理脚本中使用“ set / p”方法读取文本文件的第一行在“ for”循环的主体中不起作用?

mra68

我试图通过申请给出的答案太空炮弹这个问题的一个体内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=< %1for-loop主体中不起作用

美国空军

主要的问题是,除了循环变量外,cmd循环执行前还会在批处理文件循环中扩展变量,因此,尽管A在循环中进行了设置,但回显的值是进入循环之前的值(即空白) 。您可以看到,通过省略setfinal之前的,已设置了该值echo:输出将是相同的。

答案是启用“延迟扩展”并使用!A!代替%A%

顺便说一下copyecho文件开头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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档