Windows echo命令:cmd.exe转义的几率

时间:2017-06-02 08:12:43

标签: windows cmd escaping echo

我很遗憾被迫通过echo <input> | program.exe调用一个程序。当然,我想知道如何逃避<input>并找到:

从本质上讲,使用^来逃避所有特殊字符似乎已足够。出于好奇,我仍然想知道,为什么回声ingores首先引用逃避:

C:\>echo "foo"
"foo"

C:\>

是否有任何规范性参考?

奖金问题:如何使用echo命令回显字符串onoff

编辑:我刚刚找到this。我声明只有|<>需要转义。但是,像%FOO%这样的扩展仍然有用。

1 个答案:

答案 0 :(得分:1)

特殊字符,例如^&()<>%,{{ 1}}和!可能会导致"出现问题,同时尝试将echo字符串放入管道时也会出现问题;奇数echo特别难以处理。

构建转义序列可能非常复杂,特别是对于管道,因为这会为任何一方启动新的"实例,因此可能需要多次转义。

cmd的输出传递给程序的唯一可靠方法是使用一个变量来保存字符串以返回并应用delayed expansion,但是在管道的左侧,就像这样:

echo

请注意cmd /V /C echo(^^!VARIABLE^^!| program.exe !的双重转义,这使得此代码甚至可以在父^^!实例中启用延迟扩展时工作。 cmd前面不能有 SPACE ,因为这也是回应。请注意,|通过换行符终止输出。