Windows 7批处理文件:如何检查参数是否已传递给批处理文件

时间:2011-04-20 18:49:21

标签: windows-7 batch-file

回到90年代中期,我记得做过这样的事情:

if %1==. dir

基本上,如果你把上面的代码放在dodir.bat并自己运行而不传递任何参数,它将运行dir命令。但是,如果您将任何内容作为参数传递给它,它将不会运行dir命令。

我似乎无法在Windows 7批处理文件中使用此功能。也许我不记得正确的语法。有帮助吗?

3 个答案:

答案 0 :(得分:52)

如果参数包含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 ~@#$%^&*()_+<>?./`~!, but works"
Parameters: "Lots of symbols ~@#$%^&*()_+<>?./`~!, but works"

答案 1 :(得分:15)

实际上当时是if %1.==. command(注意.之后的%1)。你可以在Windows 7中使用它,它应该可以工作。

使用示例:

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

答案 2 :(得分:11)

尝试用引号括起来:

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

你可以把回声拿出来,我只是把它们放在那里用于教育目的。