运行以下示例批处理文件
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)批处理文件。
答案 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""