Windows批处理文件扩展变量

Windows批处理文件扩展变量,windows,variables,batch-file,expansion,Windows,Variables,Batch File,Expansion,我对批处理文件有问题。基本上,我希望在for循环中向前搜索1,并使用该值引用该位置的参数,然后将其分配给一个变量,稍后可以使用该变量,请参见下面的代码示例 示例:设置myVar=%1+1 其中%1是参数名,%2将是参数值 ::Batch file sample @echo off SETLOCAL ENABLEDELAYEDEXPANSION set count=0 set HasParam=0 set ParamValue="null" set paramValPos=0 for %%i


我对批处理文件有问题。基本上,我希望在for循环中向前搜索1,并使用该值引用该位置的参数,然后将其分配给一个变量,稍后可以使用该变量,请参见下面的代码示例

示例:设置myVar=%1+1
其中%1是参数名,%2将是参数值

::Batch file sample
@echo off

SETLOCAL ENABLEDELAYEDEXPANSION
set count=0
set HasParam=0
set ParamValue="null"
set paramValPos=0

for %%i in (%*) do (
    set /a count=!count!+1
    if /i "%%i"=="MyParam" (        
        set /a HasParam=1           
        set /a paramValPos=!count!+1
        ::The next line is where I Need Help, it's currently incorrect!
        set ParamValue=%!paramValPos!
    )   
)

if %HasParam%==1 (
    echo "Parameter Value: %ParamValue%"
)
pause
来自命令行的调用示例:prog.bat MyParam=5
现在我知道我可以在pos 2访问它,比如:

::Sample batch file
@echo off
echo "Param Name: %1"
echo "Param Value: %2"
pause
然而,这不是我想要的,因为有更多的参数,有些是可选的,它们也可以以任何顺序传入


谢谢您的帮助。

如果我正确理解了您的请求,您需要给定参数之后的下一个参数。下面的批次代码可执行以下操作:

call set "ParamValue=%%!paramValPos!"
@echo off

set "HasParam="
set "ParamValue="

for %%i in (%*) do (
   if defined HasParam (
      if not defined ParamValue (
         set ParamValue=%%i
      )
   ) else if /i "%%i"=="MyParam" (
      set HasParam=yes
   )
)

if defined HasParam (
   echo "Parameter Value: %ParamValue%"
)
pause