2011-04-16 2 views
55

我正在做一個簡單的批處理文件,需要一個參數(您可以提供更多,但我忽略它們)。Windows批處理文件:if else

對於測試,這是我迄今爲止。

if not %1 == "" (
    dir /s/b %1 
) else (
    echo no 
) 

基本上,我想說如果提供了一個參數,遞歸地顯示文件夾中的所有文件。否則,說不。

它提供了一個參數,但如果我不提供一個它只會告訴我(was unexpected at this time

我的意思是,它的工作原理,但我想至少顯示一個用戶友好的信息,解釋爲什麼它不起作用。我應該如何更改代碼?

回答

64
if not %1 == "" (

必須

if not "%1" == "" (

如果參數沒有給出,它是完全空的,甚至沒有""(代表大多數編程語言中的空字符串)。所以我們用周圍的引號來檢測一個空的參數。

+1

所以它基本上是一個空值。我知道了。 – MxyL 2011-04-16 00:36:04

+1

如果不是{%1} == {}更安全,因爲%1的值爲引號時,「%1」==「」將爲真。 – workabyte 2016-03-31 17:43:28

+2

@workabyte:如果'%1'引用一個路徑或文件,使用大括號可能會讓你更加困惑,因爲與大括號字符'{'和'}'不同,'''雙引號'''不能出現在任何Windows路徑或文件名,所以你可能會避免試圖解決那些可以解析爲'{}}}} {}'的東西,或許更現實的一點是,請注意'{{ea14c59a-889c-495b-8bb6-be78cf960e93} .txt} == {{ea14c59a-889c-495b-8bb6-be78cf960e93.txt}}'例如,爲false。 – 2016-12-09 22:11:14

19

用一些東西環繞你的%1

如:

if not "%1" == "" 

另外一個我見過的相當頻繁:

if not {%1} == {} 

等等......

的問題,因爲你可能可以猜到,是%1從字面上被替換爲空虛。它不是'空字符串',它實際上是源文件中的一個空白處。

然後在替換之後,解釋器試圖解析if語句並且感到困惑。

8

另一個相關提示是使用「%〜1」而不是「%1」。輸入「CALL /?」在Windows的命令行中獲取更多詳細信息。

+2

'%〜1 - 展開%1刪除任何周圍的引號(「)'去查找它。 – Noumenon 2016-12-28 19:29:18

9

你必須做到以下幾點:

if "%1" == "" (
    echo The variable is empty 
) ELSE (
    echo The variable contains %1 
) 
+1

這裏的重要部分是ELSE應與IF語句的右括號相同,否則會出錯。 – rook 2017-03-17 16:19:24

1

你必須做這樣的... ...

如果不是 「%1」 == 「A」

如果輸入參數%1爲空, 你的代碼會有問題。

4

另一種方法是設置一個變量,並檢查其是否被定義爲:

SET ARG=%1 
IF DEFINED ARG (echo "It is defined: %1") ELSE (echo "%%1 is not defined") 

不幸的是,直接使用%1DEFINED不起作用。