如何在一行继续之后正确地转义一个带引号的命令?

ste*_*r25 3 windows batch-file

运行以下示例批处理文件,

echo foo &&^
"C:\Program Files\Internet Explorer\iexplore.exe"
Run Code Online (Sandbox Code Playgroud)

...产生以下输出:

foo
'"C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

编辑

标记为,这个问题是处理Windows(XP)批处理文件.

jeb*_*jeb 7

对不起,但几乎所有的答案都是错的,或者不明白会发生什么.

该问题与cmd-line无关,或者是否在批处理文件中.

插入符号多行字符的规则:
行尾的插入符号,附加下一行并转义附加行的第一个字符!
这就是你得到的原因

echo foo ^
&& echo bar
---- OUTPUT ---
foo &
bar
---------------

rem equivalent to
echo foo ^&& echo bar
rem So the first ampersand is escaped and the second works as a single &
Run Code Online (Sandbox Code Playgroud)

这也是原始代码无法工作的原因

echo foo &&^
"C:\Program Files\Internet Explorer\iexplore.exe"

rem is equivalent to this, so the quote will be escaped
echo foo &&^"C:\Program Files\Internet Explorer\iexplore.exe"
Run Code Online (Sandbox Code Playgroud)

为什么其他解决方案有效?

echo foo &&^
cmd /c "C:\Program Files\Internet Explorer\iexplore.exe"

rem is equivalent to
echo foo &&^cmd /c "C:\Program Files\Internet Explorer\iexplore.exe"
Run Code Online (Sandbox Code Playgroud)

如果你正在逃避"c"与否"对于"cmd"并不重要.

有一种方法可以让第二条线工作而不需要修改它.

echo foo && >con ^
"C:\Program Files\Internet Explorer\iexplore.exe"
Run Code Online (Sandbox Code Playgroud)

这是一个特殊情况的特殊情况,插入符号作为普通多行,但不会转义第一个字符.(我想,cmd.exe没有编程,它来自混乱).

  • 这次真是万分感谢!我以为我要疯了。另一个简单的补救措施是在插入符号后面的引用行的开头添加一个空格。 (2认同)