Как раз так будет заметное усложнение логики. Наиболее просто реализуется вариант с парами ключ/значение:
читать дальше »
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
:Next
Set Key1=%~1
Set Key2=%~2
echo.Key1:[%Key1%] Key2:[%Key2%]
if defined Key1 (
if defined Key2 (
if [%Key1%] equ [-do] call :SomeProcDO "%Key2%"
if [%Key1%] equ [-kb] call :SomeProcKB "%Key2%"
shift
shift
goto :Next
)
)
endlocal
exit /b 0
:SomeProcDO
echo SomeProcDO: %~1
exit /b /0
:SomeProcKB
echo SomeProcKB: %~1
exit /b /0
Пример вызова:
читать дальше »
Код:
0005.cmd -do 1111 -do 2222 -kb 3333
Цитата:
Код:
Key1:[-do] Key2:[1111]
SomeProcDO: 1111
Key1:[-do] Key2:[2222]
SomeProcDO: 2222
Key1:[-kb] Key2:[3333]
SomeProcKB: 3333
Key1:[] Key2:[]
|
Ключи могут повторяться, перемежаться; главное — чтобы не нарушалось правило «на каждый ключ одно значение».
Другой вариант — ещё один ключ, например «-list», задающий имя текстового файла, содержащего те же самые пары «ключ/значение», например, в виде:
читать дальше »
Some List.txt
Код:
; Some comment 1
do=4444
kb=5555
; Some comment 2
do=6666
При нахождении данного ключа в командной строке пакетного файла вызывается процедура его разбора посредством «for /f» и далее делается либо то же самое сравнение, что в предыдущем примере, либо пакетный файл вызывает самого себя, передавая аргументами пару «ключ/значение», заданные в очередной строке текстового файла, наподобие:
читать дальше »
Код:
@echo off
setlocal enableextensions enabledelayedexpansion
:Next
Set Key1=%~1
Set Key2=%~2
echo.Key1:[%Key1%] Key2:[%Key2%]
if defined Key1 (
if defined Key2 (
if [%Key1%] equ [-list] call :ParseList "%Key2%"
if [%Key1%] equ [-do] call :SomeProcDO "%Key2%"
if [%Key1%] equ [-kb] call :SomeProcKB "%Key2%"
shift
shift
goto :Next
)
)
endlocal
exit /b 0
:SomeProcDO
echo SomeProcDO: %~1
exit /b /0
:SomeProcKB
echo SomeProcKB: %~1
exit /b /0
:ParseList
setlocal enableextensions enabledelayedexpansion
if exist "%~1" (
for /f "usebackq tokens=1,2 eol=; delims==" %%i in ("%~1") do call "%~dpnx0" -%%i "%%j"
) else (
echo File list [%~1] not found.
)
endlocal
exit /b /0
Пример вызова:
читать дальше »
Код:
0006.cmd -list "C:\Песочница\41\Some List.txt"
Цитата:
Код:
Key1:[-list] Key2:[C:\Песочница\41\Some List.txt]
Key1:[-do] Key2:[4444]
SomeProcDO: 4444
Key1:[] Key2:[]
Key1:[-kb] Key2:[5555]
SomeProcKB: 5555
Key1:[] Key2:[]
Key1:[-do] Key2:[6666]
SomeProcDO: 6666
Key1:[] Key2:[]
Key1:[] Key2:[]
|
Усложнённый пример вызова, с перемежением обычных ключей и ключа «-list»:
читать дальше »
Код:
0006.cmd -do 1111 -do 2222 -list "C:\Песочница\41\Some List.txt" -kb 3333
Цитата:
Код:
Key1:[-do] Key2:[1111]
SomeProcDO: 1111
Key1:[-do] Key2:[2222]
SomeProcDO: 2222
Key1:[-list] Key2:[C:\Песочница\41\Some List.txt]
Key1:[-do] Key2:[4444]
SomeProcDO: 4444
Key1:[] Key2:[]
Key1:[-kb] Key2:[5555]
SomeProcKB: 5555
Key1:[] Key2:[]
Key1:[-do] Key2:[6666]
SomeProcDO: 6666
Key1:[] Key2:[]
Key1:[-kb] Key2:[3333]
SomeProcKB: 3333
Key1:[] Key2:[]
|