【问题标题】: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 批处理文件中工作。也许我不记得正确的语法。有帮手吗?

【问题讨论】:

标签: windows-7 batch-file


【解决方案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
)

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

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多