2014-02-11 3 views
0


У меня проблема с пакетным файлом. В принципе, я хотел бы искать вперед 1 в цикле for и использовать это значение для ссылки на параметр в этой позиции, а затем назначить его переменной, которую затем я смогу использовать позже, см. Пример кода ниже.Переменные расширения Windows для пакетного файла

Пример: установить MyVar =% 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
Теперь я знаю, что я могу получить доступ к нему в позиции 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

Смежные вопросы