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

Posted

技术标签:

【中文标题】Windows 7批处理文件:如何检查参数是不是已传递给批处理文件【英文标题】:Windows 7 batch files: How to check if parameter has been passed to batch fileWindows 7批处理文件:如何检查参数是否已传递给批处理文件 【发布时间】:2011-08-09 18:14:12 【问题描述】:

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

if %1==. dir

基本上,如果您将上述代码放在dodir.bat 中并在不传递任何参数的情况下自行运行它,它将运行 dir 命令。但是,如果你将任何东西作为参数传递给它,它就不会运行 dir 命令。

我似乎无法让它在我的 Windows 7 批处理文件中工作。也许我不记得正确的语法。有帮手吗?

【问题讨论】:

一个“包罗万象”的例子:***.com/questions/830565/… 【参考方案1】:

如果参数包含"<等各种符号,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 的作用的参考? @josejulio 你可以“打电话/?”获取有关参数可以做的所有花哨的事情的详细信息。对于 %~1 它说:扩展 %1 删除任何周围的引号 (")【参考方案2】:

当时其实是if %1<b>.</b>==. <i>command</i>(注意%1后面的.)。您现在可以在 Windows 7 中使用它,它应该可以工作。

示例用法:

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

【讨论】:

句号代表什么? @RishabhBhatnagar:我不相信它代表任何特定的东西。它只是为了避免在%1 计算为空字符串的情况下出现语法错误。它可能是其他字符,而且我确实看到过其他字符(例如if %1A==A),但. 可能在这种特定模式中最常使用。请注意,这种模式在过去的 DOS 时代很流行。如今,if "%~1"=="" 和 suggested by Tolga 将是首选方法。【参考方案3】:

尝试用引号括起来:

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

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

【讨论】:

以上是关于Windows 7批处理文件:如何检查参数是不是已传递给批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Windows 批处理文件检查端口 8086 是不是正在侦听

如何在启动/调用批处理文件时检查是不是定义了参数?

如何检查页面是不是已启动或用户是不是已连接到域

尝试使用 memoization 对象检查参数是不是已被计算...似乎无法处理使用对象作为参数

如何检查 Windows Universal 10 应用程序是不是已关闭而不是最小化?

如何检查给定的字符串是不是是 Windows 下的合法/有效文件名?