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 对象检查参数是不是已被计算...似乎无法处理使用对象作为参数