2011-04-20 117 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

相关问题