2012-03-15 101 views
4

我正在將運行輸入參數作爲命令在我的dos批處理文件中,正如我在: Run an input parameter as command in dos batch script中所述。 這有效,但是我遇到的問題:檢查輸入命令是否爲空。 我做什麼:檢查dos批處理文件中的輸入命令?

SETLOCAL 
set CMD=%* 
echo Running command [%CMD%] 
IF "%CMD%"=="" (
echo "Input argument missing: command" 
GOTO :end 
) 
echo "XXX %CMD%" 

運行:

script.bat echo "a b c" 

將輸出:

Running command [echo "a b c"] 
b was unexpected at this time. 

這發生在IF條件,但是爲什麼呢?

如何檢查我的輸入是否爲空。我知道如何檢查一個字符串是否在dos中是空的,但由於某種原因,它不能在這個組合中工作:(
順便說一句:如果我刪除了IF條件,它的效果很好,那就是:命令執行正確。

  • 埃德

回答

3

試驗沒有參數的第一,然後分配和處理命令:

IF .%1 == . (
echo "Input argument missing: command" 
GOTO :eof 
) 

SETLOCAL  
set CMD=%* 
echo Running command [%CMD%] 
echo "XXX %CMD%" 

至於「爲什麼?」,這是因爲在引號值爲CMDa之前的那個)在%CMD%之前關閉引號,因此字符串顯示爲"echo "a b c"",因此b與字符串分離,導致命令處理器失敗。 (它期望比較令牌,如==EQU,但不是一些奇怪的b)。

+3

+1,因爲你總是正確的。但我優先考慮如果「%〜1」==「」'因爲它更安全 – jeb 2012-03-15 20:37:45

+0

謝謝,我在想困難:( – edbras 2012-03-15 20:42:46

+0

@jeb:謝謝,我也想過''%〜1「==」「' ,但是如果由於某種原因第一個參數只是''「'(而第二個參數是一個非空值),那麼它可能會引起誤解。我的意思是,我們不能確定是否可以指定''」 「''或者不是,所以我想我會用'。%1 ==。'test。 – 2012-03-15 20:48:09

相關問題