在“命令存在”中回显是否总是需要在Windows命令提示符下使用双引号?

时间:2017-03-09 23:55:58

标签: batch-file cmd quotes

我正在尝试查找文件的存在,然后在命令提示符下打印出目录:

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\"

我使用了这个命令的输出,并且它周围的引号引起了一些问题。有没有什么方法可以在不添加引号的情况下回应这个?

2 个答案:

答案 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+

所以你有两个选择:

  1. 删除整个(命令行周围的) / 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\
    
  2. 或转义(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\)
    
  3. 条件命令部分周围的括号不是必需的,除非:

    1. 您想要构建一个多行块:

      if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (
          echo C:\Program Files^(x86^)\Microsoft Visual Studio 14.0\
      )
      
    2. 或者您想使用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!
      
    3. 或以上的组合:

      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!
      )
      
    4. 有关详情,请参阅:IF

答案 1 :(得分:1)

aschipfl的回答已经解释了最多的要点 但通常你不能或不想逃避括号,因为你正在使用未知内容的变量,如%ProgramFiles%
如果你想在没有引号的情况下回显它们而没有转义,你可以使用延迟扩展。

setlocal EnableDelayedExpansion
set "dir=!ProgramFiles!"
if exist "!dir!" (
   echo !dir!
)