Показать полную графическую версию : [решено] Обработка ключей запуска CMD- файла
volk1234
17-12-2009, 23:03
Приведенный код
Call Set $_%$I%=%%$_%$I%%%%$P:~1%
отрезает не только '-' но и первые цифры, буквы от параметров.
Т.е. приведенная вами тестовая строчка дает результат
reg1 55
reg2 28 56
Второй вопрос - можно вставить такую обработку команды -unlockall, чтобы она выполнялась одна и другие ключи игнорировались?
:CMD_PARSE
If /I "%$P:~0,1%"=="-" Set /A $I=%$I%+1
Call Set $_%$I%=%%$_%$I%%%%$P:~1%
If "$_%$I%"=="unloackall" Goto :unlockall
GoTo :EOF
Ах да, еще мне не совсем понятно - как организовать в таком случае проверку синтаксиса - в случае указания несуществующего ключа, как завернуть скрипт на секцию :syntax_error
отрезает не только '-' но и первые цифры »
да, поторопился - исправил
чтобы она выполнялась одна и другие ключи игнорировались? »те, что после нее?
как организовать в таком случае проверку синтаксиса - в случае указания несуществующего ключа, как завернуть скрипт на секцию :syntax_error »например, так:
@Echo Off
Set $I=0& For %%i In (%*) Do Set $P=%%i& Call :CMD_PARSE
For /F "Tokens=1* Delims==" %%i In ('Set $_') Do 2>Nul Call :%%j||Call :SYNTAX_ERROR %%j
Exit /B
:REG1
Echo REG1 %*
GoTo :EOF
:REG2
Echo REG2 %*
GoTo :EOF
:SYNTAX_ERROR
Echo ОШИБКА! Ключ "%1" не поддерживается!
GoTo :EOF
:CMD_PARSE
If /I "%$P:~0,1%"=="-" Set $P=%$P:~1%& Set /A $I=%$I%+1
Call Set $_%$I%=%%$_%$I%%%%$P%
GoTo :EOF
volk1234
18-12-2009, 02:01
Второй вопрос - можно вставить такую обработку команды -unlockall, чтобы она выполнялась одна и другие ключи игнорировались? »
те, что после нее? »
Нет, просто чтобы игнорировались все команды кроме нее. Просто этот ключ отменяет действия всех других - поэтому нет смысла его выполнять наряду с ними.
@Echo Off
Set $I=0& For %%i In (%*) Do Set $P=%%i& Call :CMD_PARSE
If Not Defined $SKIP For /F "Tokens=1* Delims==" %%i In ('Set $_') Do 2>Nul Call :%%j||Call :ERR0 %%j
Exit /B
:REG1
Echo REG1 %*
Exit /B 0
:REG2
Echo REG2 %*
Exit /B 0
:ERR0
Echo ОШИБКА! Ключ "%1" не поддерживается!
GoTo :EOF
:CMD_PARSE
If /I "%$P%"=="-unlockall" Set $SKIP=TRUE
If /I "%$P:~0,1%"=="-" Set $P=%$P:~1%& Set /A $I=%$I%+1
Call Set $_%$I%=%%$_%$I%%%%$P%
GoTo :EOF
volk1234
18-12-2009, 10:29
Единственное - команда -unlockall просто вызывает завершение скроипта, а надо - переход в секцию :unlockall
команда -unlockall просто вызывает завершение скроипта »
не ЗАВЕРШЕНИЕ, а пропуск обработки парметров и ПРОДОЛЖЕНИЕ работы скрипта, можно и так:
@Echo Off
Set $I=0& For %%i In (%*) Do Set $P=%%i& Call :CMD_PARSE
If Defined $SKIP (GoTo :UnlockAll
) Else For /F "Tokens=1* Delims==" %%i In ('Set $_') Do 2>Nul Call :%%j||Call :ERR0 %%j
Echo Код ПОСЛЕ обработки всех ключей
Exit /B
:UnlockAll
Echo Код ВМЕСТО обработки ключей с последующим выходом
Exit /B
:REG1
Echo REG1 %*
Exit /B 0
:REG2
Echo REG2 %*
Exit /B 0
:ERR0
Echo ОШИБКА! Ключ "%1" не поддерживается!
GoTo /B 0
:CMD_PARSE
If /I "%$P%"=="-unlockall" Set $SKIP=TRUE
If /I "%$P:~0,1%"=="-" Set $P=%$P:~1%& Set /A $I=%$I%+1
Call Set $_%$I%=%%$_%$I%%%%$P%
GoTo :EOF
P.S. Если заменить "GoTo" на "CALL :", то в :UnlockAll будет "Код ВМЕСТО обработки ключей с последующим ПРОДОЛЖЕНИЕМ"
volk1234
18-12-2009, 16:49
Что то в реальном скрипте не получается обработать несколько парамеров, (один параметр нормально)
похоже глотает пробелы скрипт между ключами и параметрами ключей...
:CORE
Set $I=0& For %%i In (%*) Do Set $P=%%i& Call :KEYS_PARSE
If Defined $SKIP (GoTo :UnlockAll
) Else For /F "Tokens=1* Delims==" %%i In ('Set $_') Do 2>Nul Call :%%j||Call :Syntax_Error %%j
Echo.
Echo Skript end working& Pause
Echo.
Exit /B 0
:KEYS_PARSE
If /I "%$P%"=="-unlockall" Set $SKIP=TRUE
If /I "%$P:~0,1%"=="-" Set $P=%$P:~1%& Set /A $I=%$I%+1
Call Set $_%$I%=%%$_%$I%%%%$P%
GoTo :EOF
в реальном скрипте не получается обработать несколько парамеров »для "реального скрипта" не хватает обработчиков ошибок, параметров и "unlockall", поэтому не ясно о чем речь, кроме того в строке
Call Set $_%$I%=%%$_%$I%%%%$P%
GoTo :EOFотсутствует обязательный оконечный пробел, разделяющий параметры
volk1234
20-12-2009, 21:46
проблема была в другом- в конкретных секциях ожидались переменные %2 %3 которых теперь просто нет...
т.е. они могут быть, но их нет.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC