2014-02-11 191 views
0


我遇到了批处理文件的问题。基本上,我想通过for循环寻找1,并使用该值来引用该位置上的参数,然后将其分配给一个变量,稍后可以使用该变量,请参阅下面的代码示例。Windows批处理文件扩展变量

示例:set 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 

然而,这不是我想要什么,因为有更多的参数,有些是可选的,他们也可以以任何顺序传入。

感谢您的协助。

回答

0
call set "ParamValue=%%!paramValPos!" 
+0

谢谢你的工作很好。 – add

0

如果我理解您的要求正确,你想给定一个之后的下一个参数。批处理代码如下所示:

@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 
+0

太好了,这也适用。非常感谢。 – add