我正在编写一个Windows CMD批处理文件,(为了简化目的)应该回显此文件的每一行:
Flash
your
lights
on
and
off
问题是,当它到达第4和第6个单词时,它最终运行echo on
和echo off
,不实际上回显文本,而只是它将echo的状态设置为ON和OFF。
for /F %%a in (DataFile.txt) do echo %%a
结果输出为:
Flash
your
lights
and
有没有办法真正回应文字on
和off
?
答案 0 :(得分:4)
根据this post on DosTips.com,回应任何文本的唯一安全方法是使用奇怪的语法echo(
。所以对于你的命令行:
for /F %%a in (DataFile.txt) do echo(%%a
常用语法echo.
,但如果当前工作目录中存在名为echo.
(无扩展名)的文件,则会失败。
如果您尝试回显以问号开头的字符串,则有时会使用语法echo/
(因为/
后跟?
被解释为/?
开关以显示帮助该命令的文字。)
答案 1 :(得分:1)
试试这个:
@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ %userprofile%\Desktop\DataFile.txt"`) do (
set "var=%%a"
SETLOCAL EnableDelayedExpansion
set "var=!var:*:=!"
echo(!var!
ENDLOCAL
)
Pause
查看this link。
打开和关闭,在您正在做的事情的背景下,因为它们就是您所说的(语言中的保留字),它们被用作@echo off
或@echo on
< / p>
我发布的脚本解决了这个小问题。然而,我在批处理方面缺乏知识迫使我总结我的答案,因为我不知道脚本是如何做到的。