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

时间:2010-08-02 19:27:18

标签: windows 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)批处理文件。

6 个答案:

答案 0 :(得分: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 &

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

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没有编程,它来自混乱)。

答案 1 :(得分:1)

当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!

答案 2 :(得分:1)

这似乎也有效:

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

答案 3 :(得分:0)

尝试把&&在第二行。

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

编辑:正如问题所示,此命令必须在批处理文件中运行。它可以从批处理文件中运行,但在命令行中运行不正确!

答案 4 :(得分:-1)

尝试删除&符号。

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

答案 5 :(得分:-1)

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

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