【问题标题】:Check parameter is set in any position in a Windows Batch script检查参数设置在 Windows 批处理脚本中的任何位置
【发布时间】:2021-09-17 19:59:54
【问题描述】:

在 Windows 批处理脚本中,如何检查给定参数是否设置在任何位置?比如我打电话给myscript.bat,如下:

myscript.bat /foo /bar

我想确定是否设置了/foo 我可以这样做:

if "%1" == "/foo" echo "/foo is set"

但是现在说我这样调用脚本:

myscript.bat /bar /foo

上面的代码不再回显/foo is set

我如何编写一个if 条件,使得/foo 是否处于任何位置都是正确的? Windows Batch 是否提供了一种无需检查 for 循环中的每个参数的简单方法?

【问题讨论】:

标签: windows batch-file cmd


【解决方案1】:

有几种方法可以做到这一点。也许这是最简单的一个:

@echo off
setlocal

rem Set elements of "argv" array variable
for %%a in (%*) do set "argv[%%a]=1"

rem Check for a given switch
if defined argv[/foo] echo /foo is set

你可以这样扩展这个方法:

@echo off
setlocal

rem Set elements of "argv" array variable
set "n=0"
for %%a in (%*) do set /A "n+=1, argv[%%a]=n"

rem Check for a given switch and its position
if defined argv[/foo] echo /foo is set at position %argv[/foo]%

【讨论】:

    【解决方案2】:

    你应该举一个真实的例子说明为什么你需要得到论证的确认。

    然而,这个不太好的例子在没有 for 和 if 的情况下也能正常工作

    @echo off & set foo=
    echo "%*" | find "/foo" && set foo=found
    if "%foo%" equ "found" echo "/foo is set"
    

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 1970-01-01
      • 2011-05-10
      • 2023-03-06
      • 2014-12-26
      • 1970-01-01
      • 2010-11-15
      • 2011-10-10
      • 2015-02-19
      相关资源
      最近更新 更多