2011-04-20 92 views
18

早在90年代中期,我記得做這樣的事情:Windows 7的批處理文件:如何檢查是否參數已經傳遞到批處理文件

if %1==. dir 

基本上,如果你把上面的代碼中dodir.bat並運行它自己而不傳遞任何參數,它會運行dir命令。但是,如果您將任何參數都作爲參數傳遞,它將不會運行dir命令。

我似乎無法得到這個在我的Windows 7批處理文件中工作。也許我不記得正確的語法。任何助手?

+0

一個 「一網打盡」 的例子:http://stackoverflow.com/questions/830565/how-do-i-check-that-a-parameter-is-defined-什麼時候打電話批量文件/ 34552964#34552964 – 2016-01-01 01:47:53

回答

11

其實它是if %1.==. command(注意在%1之後的.)。你現在可以在Windows 7中使用它,它應該可以工作。

實例:

if %1.==. (
    echo No parameters have been provided. 
) else (
    echo Parameters: 
    echo %* 
) 
+0

啊..現在我記得了! thx – oscilatingcretin 2011-04-20 21:01:46

11

嘗試在引號引起:

if "%1"=="" (
    echo "nothing was passed" 
) else (
    echo "a parameter was passed" 
    dir 
) 

您可以回聲的出來,我只是把它們放在那裏的教育目的。

42

if %1.==. dir將打破如果所述參數包括各種符號等"<

if "%1"==""將打破如果所述參數包括報價(")。

使用if "%~1"==""代替:

if "%~1"=="" (
    echo No parameters have been provided. 
) else (
    echo Parameters: %* 
) 

這應該在Windows和DOS的所有版本。

單元測試:

C:\>test 
No parameters have been provided. 

C:\>test "Lots of symbols [email protected]#$%^&*()_+<>?./`~!, but works" 
Parameters: "Lots of symbols [email protected]#$%^&*()_+<>?./`~!, but works" 
+0

您能否詳細說明或通過%〜1做什麼的參考? – Josejulio 2016-05-16 23:19:08

+1

@josejulio你可以做「打電話/?」詳細瞭解所有您可以使用參數完成的奇特事情。對於%〜1,它表示:展開%1刪除任何周圍的引號(「) – Tolga 2016-11-24 16:50:47

相關問題