Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Обработка параметров и ключей запуска меток BAT-файла (http://forum.oszone.net/showthread.php?t=235107)

polybas 21-05-2012 16:12 1919929

Обработка параметров и ключей запуска меток BAT-файла
 
Продолжение темы

Создал маленький 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


Время: 10:08.

Время: 10:08.
© OSzone.net 2001-