字面上回应文本" on"

时间:2016-09-19 16:31:50

标签: batch-file cmd escaping

我正在编写一个Windows CMD批处理文件,(为了简化目的)应该回显此文件的每一行:

Flash
your
lights
on 
and
off

问题是,当它到达第4和第6个单词时,它最终运行echo onecho off实际上回显文本,而只是它将echo的状态设置为ON和OFF。

for /F %%a in (DataFile.txt) do echo %%a

结果输出为:

Flash
your
lights
and

有没有办法真正回应文字onoff

2 个答案:

答案 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>

我发布的脚本解决了这个小问题。然而,我在批处理方面缺乏知识迫使我总结我的答案,因为我不知道脚本是如何做到的。