我很遗憾被迫通过echo <input> | program.exe
调用一个程序。当然,我想知道如何逃避<input>
并找到:
从本质上讲,使用^
来逃避所有特殊字符似乎已足够。出于好奇,我仍然想知道,为什么回声ingores首先引用逃避:
C:\>echo "foo"
"foo"
C:\>
是否有任何规范性参考?
奖金问题:如何使用echo命令回显字符串on
和off
?
编辑:我刚刚找到this。我声明只有|<>
需要转义。但是,像%FOO%
这样的扩展仍然有用。
答案 0 :(得分:1)
特殊字符,例如^
,&
,(
,)
,<
,>
,%
,{{ 1}}和!
可能会导致"
出现问题,同时尝试将echo
字符串放入管道时也会出现问题;奇数echo
特别难以处理。
构建转义序列可能非常复杂,特别是对于管道,因为这会为任何一方启动新的"
实例,因此可能需要多次转义。
将cmd
的输出传递给程序的唯一可靠方法是使用一个变量来保存字符串以返回并应用delayed expansion,但是在管道的左侧,就像这样:
echo
请注意cmd /V /C echo(^^!VARIABLE^^!| program.exe
!
的双重转义,这使得此代码甚至可以在父^^!
实例中启用延迟扩展时工作。 cmd
前面不能有 SPACE ,因为这也是回应。请注意,|
通过换行符终止输出。