PDA

Показать полную графическую версию : [решено] Обработка ключей запуска CMD- файла


Страниц : 1 [2]

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

amel27
18-12-2009, 01:16
отрезает не только '-' но и первые цифры »
да, поторопился - исправил

чтобы она выполнялась одна и другие ключи игнорировались? »те, что после нее?

как организовать в таком случае проверку синтаксиса - в случае указания несуществующего ключа, как завернуть скрипт на секцию :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, чтобы она выполнялась одна и другие ключи игнорировались? »

те, что после нее? »

Нет, просто чтобы игнорировались все команды кроме нее. Просто этот ключ отменяет действия всех других - поэтому нет смысла его выполнять наряду с ними.

amel27
18-12-2009, 02:45
@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

amel27
18-12-2009, 10:54
команда -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

amel27
19-12-2009, 06:17
в реальном скрипте не получается обработать несколько парамеров »для "реального скрипта" не хватает обработчиков ошибок, параметров и "unlockall", поэтому не ясно о чем речь, кроме того в строке
Call Set $_%$I%=%%$_%$I%%%%$P%
GoTo :EOFотсутствует обязательный оконечный пробел, разделяющий параметры

volk1234
20-12-2009, 21:46
проблема была в другом- в конкретных секциях ожидались переменные %2 %3 которых теперь просто нет...
т.е. они могут быть, но их нет.




© OSzone.net 2001-2012