簡體   English   中英

Windows命令提示符中的“如果存在”內的回聲是否總是需要雙引號嗎?

[英]Does echo inside “if exists” always requires double quotes in windows command prompt?

我正在嘗試查找文件的存在,然后在命令提示符下按如下所示打印目錄:

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

我利用了該命令的輸出,它周圍的引號引起了一些問題。 有什么辦法可以在不添加引號的情況下回顯它?

該問題是在括號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\\) 

除非有必要,否則條件命令部分的括號是沒有必要的:

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

有關更多信息,請參見: IF

大多數問題已經由aschipfl的答案進行了解釋。
但是通常情況下,您無法或不想轉義括號,因為您正在使用內容未知的變量,例如%ProgramFiles%
如果您想在不加引號且沒有轉義的情況下回顯它們,則可以使用延遲擴展。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM