2012-10-12 54 views
0

我看到一個Windows批處理文件如下驅動:檢查命令行參數是使用IF

.. 
::Handle the case where the install dir is specified as a drive 
if not "%1" == "" if /I "%1" == "%~d1" set INSTALL_DIR=%~d1 
.. 

問題1:我從來沒有看到兩個if語句一起使用,這樣。它是否像AND一樣,即(persudo代碼:((「%1」!=「」)和(%1 ==「%〜d1」))?

問題2:它似乎會設置INSTALL_DIR只有1%是一個驅動器,但不是單次檢查已經足夠了嗎?

if /I "%1" == "%~d1" set INSTALL_DIR=%~d1 

回答

2

是2 if的一起使用,並沒有真正很大的差異,它只是事實恰巧運行該命令如果第一次成功是另一個if聲明。

是的,2 if的具有同等功能的AND邏輯。

單個檢查似乎已經足夠了,但前提是他們沒有對批處理執行特定的錯誤消息。

例如,如果沒有給出參數,他們可能想要明確地檢查它,並給出錯誤消息,指出沒有參數。如果有,並且不是驅動器,請給出另一個錯誤消息。

希望這會有所幫助。

0

問題1:你可能會發現這樣做你的IF嵌套更容易(爲了可讀性)。

.. 
::Handle the case where the install dir is specified as a drive 
if not "%1" == "" ( 
if /I "%1" == "%~d1" ( 
set INSTALL_DIR=%~d1 
) 
) 
.. 

這也允許您在「if」實例中嵌套多個命令。例如:

.. 
::Handle the case where the install dir is specified as a drive 
if not "%1" == "" ( 
echo Parameter 1 is not empty 
if /I "%1" == "%~d1" ( 
echo Parameter 1 is a drive so setting the variable 
set INSTALL_DIR=%~d1 
) 
) 
.. 

問題2:在您的例子中測試並有效要求的參數是驅動器或路徑(與驅動器)和過濾參數下降到單獨的驅動器。

夠了嗎?這取決於你需要做這樣的額外檢查:

  • 如果驅動器存在
  • 如果驅動器是一個本地硬盤

如果你有檢查,有足夠的實在是高達你和你需要你的代碼的強大程度,以及你對%1中使用的內容有多少控制。