我正在尝试查找文件的存在,然后在命令提示符下打印出目录:
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\)
此操作失败并出现以下错误:
\Microsoft was unexpected at this time.
如果我将命令重写为
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo "C:\Program Files(x86)\Microsoft Visual Studio 14.0\")
打印:
"C:\Program Files(x86)\Microsoft Visual Studio 14.0\"
我使用了这个命令的输出,并且它周围的引号引起了一些问题。有没有什么方法可以在不添加引号的情况下回应这个?
答案 0 :(得分:5)
问题是echo
部分中的括号,)
中的结束(x86)
被视为(
前面的开头echo
的对应部分}。
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\)
rem // ^ ^
rem // +opening-----------closing+
所以你有两个选择:
删除整个(
命令行周围的)
/ echo
:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\
或转义(x86)
中的括号,例如:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\)
或:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86^)\Microsoft Visual Studio 14.0\)
条件命令部分周围的括号不是必需的,除非:
您想要构建一个多行块:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (
echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\
)
或者您想使用else
子句:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\) else echo ERROR: file not found!
或以上的组合:
if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (
echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\
) else (
echo ERROR: file not found!
)
有关详情,请参阅:IF
。
答案 1 :(得分:1)
aschipfl的回答已经解释了最多的要点
但通常你不能或不想逃避括号,因为你正在使用未知内容的变量,如%ProgramFiles%
。
如果你想在没有引号的情况下回显它们而没有转义,你可以使用延迟扩展。
setlocal EnableDelayedExpansion
set "dir=!ProgramFiles!"
if exist "!dir!" (
echo !dir!
)