我不幸被迫通过echo <input> | program.exe
调用程序。当然,我想知道如何逃脱<input>
,发现:
- Windows 命令解释器 (CMD.EXE) 如何解析脚本?
- Windows 命令提示符中的转义尖括号
从本质上讲,用^
逃避所有特殊字符似乎就足够了。出于好奇,我还是想知道,为什么首先要回响英戈尔斯双引号转义:
C:>echo "foo"
"foo"
C:>
是否有任何规范性参考?
奖励问题:如何使用 echo 命令on
和off
回显字符串?
编辑:我刚刚找到这个。我声明,只需要逃脱|<>
。但是,像%FOO%
这样的扩展仍然有效。
特殊字符如^
、&
、(
、)
、<
、>
、%
、!
和"
可能会导致echo
问题,当试图将字符串echo
到管道中时也是如此;奇数"
特别难以处理。
构建转义序列可能非常复杂,尤其是对于管道,因为这会为任何一方启动新的cmd
实例,因此可能需要多次转义。
将echo
的输出通过管道传输到程序中的唯一可靠方法是使用保存字符串的变量返回并应用延迟扩展,但在管道的左侧,如下所示:
cmd /V /C echo(^^!VARIABLE^^!| program.exe
请注意像^^!
这样的!
的双重转义,这使得此代码甚至可以在父cmd
实例中启用延迟扩展时工作。|
前面一定没有空格,因为否则也会有回声。请注意,echo
通过换行符终止输出。