我的echo命令被cmd理解错误

时间:2014-08-20 20:01:55

标签: batch-file echo

我正在尝试获取此字符串:

echo for /f "tokens=1 delims=" %%a in (killinput.txt) do if "%%a"=="stop" exit>> input.bat`

在input.bat文件中,但我的批处理文件在屏幕上打印此字符串,而不是在文件input.bat中输入

这是我的脚本 - >

echo for /f "tokens^=1 delims^=" %%%a in ^(killinput.txt^) do if "%%%a"^=^="stop" exit>> input.bat

这是我的输出 - >

for /f "tokens^=1 delims^=" %%a"^=^="stop" exit>> input.bat

我希望你能帮助我!日Thnx

2 个答案:

答案 0 :(得分:1)

echo for /f "tokens=1 delims=" %%%%a in (killinput.txt) do if "%%%%a"=="stop" exit >> input.bat

您的示例中的主要问题是%%%a。前两个百分号表示输出一个百分号,第三个符号表示变量的名称

echo for /f "tokens^=1 delims^=" %%%a in ^(killinput.txt^) do if "%%%a"^=^="stop" exit>> input.bat
                                   ^                              ^
      The variable is              %a in ^(killinput.txt^) do if "%

由于此变量不包含任何内容,因此不会回显任何内容,结果就是你得到的结果。

答案 1 :(得分:0)

你的问题令人困惑。我假设您需要输出文件中的以下行:

for /f "tokens=1 delims=" %%a in (killinput.txt) do if "%%a"=="stop" exit

您在上面的ECHO之前正确使用,并在最后添加了>>input.bat。但后来你遇到了麻烦。

需要发生的关键事情是每个%必须转义为%%。因此%%a需要成为%%%%a。但是您使用了%%%a。正如MC ND指出的那样,这个错误完全解释了你的输出。它解释了为什么IN()子句消失了,并解释了为什么输出出现在屏幕而不是输出文件上。 IN()子句和DO IF的开头被视为一个不存在的变量名称被删除。这导致不平衡的引号,这意味着现在引用重定向,因此它被视为字符串文字而不是重定向。

另一个错误是你逃脱了一些不应该被转义的引用字符。通常,您可以转义特殊字符,也可以引用它们,但不能同时引用它们。 (当然,每条规则都有例外)。

此外,在ECHO之后永远不需要转义(,如果ECHO位于带括号的区块内,则)只需要转义。

所以,如果这条线独立,那么就可以这么简单:

echo for /f "tokens=1 delims=" %%%%a in (killinput.txt) do if "%%%%a"=="stop" exit>>input.bat

如果该行在带括号的块内,那么它应该是:

(
  echo for /f "tokens=1 delims=" %%%%a in (killinput.txt^) do if "%%%%a"=="stop" exit>>input.bat
)