如何在续行后正确地转义引用的命令?

运行下面的示例batch file

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

…产生以下输出:

 foo '"C:\Program' is not recognized as an internal or external command, operable program or batch file. 

我错过了什么?

编辑

作为标记,这个问题是处理Windows(XP)batch file。

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

问题是独立于cmd行或如果它在批处理文件中。

脱字符多行字符的规则:
在行结束处插入一个字符,追加下一行并转义附加行的第一个字符!
这就是你得到的原因

 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 & 

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

 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" 

为什么另一个解决方案有效?

 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" 

如果你逃避“C”或不是“CMD”不重要。

有一种方法可以在不修改第二行的情况下工作。

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

这是一个特殊情况的特殊情况 ,脱字符作为一个正常的多行,但不逃避第一个字符。 (我想,cmd.exe没有编程,它出来的混乱)。

在引用条件处理符号(即&&&|| )之前,引号似乎被cmd.exe正确解析。

作为解决方法,您可以使用仅包含没有空白字符的短名称的路径:

 echo foo &&^ C:\Progra~1\Intern~1\iexplore.exe 

或者使用带有延迟变量扩展的辅助变量:

 setlocal enabledelayedexpansion set "IE_EXE=C:\Program Files\Internet Explorer\iexplore.exe" echo foo &&^ !IE_EXE! 

这似乎也工作:

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

尝试把&放在第二行。

 echo foo ^ && "C:\Program files\internet explorer\iexplore.exe" 

编辑:如问题问,这个命令必须运行在一个批处理文件。 它从批处理文件工作,但在命令行不正确的工作!

如果包含空格,则需要引用该路径; 我不太清楚你正在处理什么语言,但基本上你需要:

 ""C:\Program Files\Internet Explorer\iexplore.exe"" 

尝试删除&符号。

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

我明白了

 C:\Users\keith\Desktop>echo foo foo C:\Users\keith\Desktop>"C:\Program Files\Internet Explorer\iexplore.exe" 

编辑 – 我没有在我的批处理文件的顶部@echo off