Продолжение темы
Создал маленький BAT файл для выполнения разных задач с глобальными, локальными параметрами и ключами.
Исходный код run.bat:
Код:

@echo off
setlocal EnableDelayedExpansion EnableExtensions
rem =============================================================================
set $D=1
for %%i in (%*) do call:parse %%i
call:MAIN
if %$D% GTR 1 call:parse_do
goto:eof
rem Functions
:parse
set $P=%~1
if /I "%$P:~0,1%"=="-" if %$D% EQU 1 for /f "delims=: tokens=1,2" %%f in ('echo.%$P%') do call:parse_set %%f %%g
if /I "%$P:~0,1%"=="/" if %$D% EQU 1 set KEY_%$P:~1%=1
if /I "%$P:~0,1%"=="-" if %$D% GTR 1 call:parse_do_p %$P:~1%
if /I "%$P:~0,1%"=="/" if %$D% GTR 1 call:parse_do_k %$P:~1%
if /I not "%$P:~0,1%"=="-" if /I not "%$P:~0,1%"=="/" set /a $D+=1& set $DO_%$D%=%$P%
goto:eof
:parse_do
set /a $_D=$D-1
for /l %%i in (1,1,%$_D%) do (
setlocal
if /I not "!$DO_%%i_P!"=="" call:parse_do_set_p !$DO_%%i_P!
if /I not "!$DO_%%i_K!"=="" call:parse_do_set_k !$DO_%%i_K!
call:!$DO_%%i!
endlocal
)
goto:eof
:parse_do_p
set /a $_D=$D-1
set $DO_%$_D%_P=%~1,!$DO_%$_D%_P!
goto:eof
:parse_do_k
set /a $_D=$D-1
set $DO_%$_D%_K=%~1,!$DO_%$_D%_K!
goto:eof
:parse_set
set $F=%1& set $G=%~2
set %$F:~1%=%$G%
goto:eof
:parse_do_set_p
for %%i in (%*) do (
set $VAR=%%i
for /f "delims=: tokens=1,2" %%f in ('echo.!$VAR!') do call:parse_set -%%f %%g
)
goto:eof
:parse_do_set_k
set KEY_%1=1
goto:eof
:help
echo.Start batch script with global parameters and key, call label with local parameters and key.
echo.
echo.Syntax:
echo. run.bat [-global_parameters:"value"] [/global_key] [label] [[-label_parameters:"value"] [/label_key]]
echo.
echo.Format:
echo.
echo. Global_parameters - Set global parameters with value. -parameter1:"value1"
echo. Global_key - Set parameter with value 1. /key1
echo. Label - Call label in batch script. do1
echo. Label_parameters - Set label parameter value. -parameter2:"value2"
echo. Label_key - Set local parameter with value 1. /key2
echo.
echo.Example:
echo.
echo. run.bat -par1:val1 /key1 do1 -par2:"va l2" /key2 do2 /key3
echo.
echo.Help:
echo.
echo. run.bat help
echo.& pause& exit
rem =============================================================================
rem MAIN
:MAIN
echo.Start Global sctipt, if there is no set labels in shell.
echo.key_key1==%KEY_key1%
echo.par==%par%
goto:eof
rem do1
:do1
echo.Run DO1
echo.key_key2==%KEY_key2%
echo.par==%par%
goto:eof
rem do2
:do2
echo.Run DO2
echo.key_key3==%KEY_key3%
echo.par==%par%
goto:eof
Код запуска бат-файла с параметрами и ключами:
Код:

call run.bat -par:val1 /key1 do1 -par:"va l2" /key2 do2 /key3
Результат:
Код:

Start Global sctipt, if there is no set labels in shell.
key_key1==1
par==val1
Run DO1
key_key2==1
par==va l2
Run DO2
key_key3==1
par==val1
Вызов помощи:
Код:

call run.bat help