|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Можно ли передать в cmd/bat именованные параметры? |
|
CMD/BAT - [решено] Можно ли передать в cmd/bat именованные параметры?
|
Новый участник Сообщения: 48 |
|
|
Отправлено: 20:06, 09-02-2009 |
![]() Ветеран Сообщения: 2907
|
Профиль | Отправить PM | Цитировать FunkyByte, насколько я знаю, нет
![]() |
Отправлено: 20:49, 09-02-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Сообщения: 53488
|
Профиль | Отправить PM | Цитировать FunkyByte, придется обработку делать в самом скрипте:
@Echo Off SetLocal EnableExtensions EnableDelayedExpansion :CmdLine Set P=%1 If "!P!"=="" GoTo :Cont If /I "!P:~0,12!"=="/FirstParam:" Set FirstParam=!P:~12! If /I "!P:~0,10!"=="/SecParam:" Set SecParam=!P:~10! Shift GoTo :CmdLine :Cont Echo FirstParam=!FirstParam! Echo SecParam=!SecParam! Результаты в переменных !FirstParam! и !SecParam! |
Отправлено: 21:10, 09-02-2009 | #3 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать FunkyByte, немного изменил скрипт от Petya V4sechkin, чтобы не привязываться к именам переменных и их количеству, которые могут быть изменены пользователем, и не зависеть от их длины.
@Echo off SetLocal EnableExtensions EnableDelayedExpansion :CmdLine If %1#==# GoTo :Cont Set P=%1 for /f "tokens=1,2 delims=:" %%i in ("!P:~1!") do Set %%i=%%j Shift GoTo :CmdLine :Cont rem следующие строки нужны только для контроля при отладке, т.к., имена переменных могут быть изменены пользователем Echo FirstParam=!FirstParam! Echo SecParam=!SecParam! |
Отправлено: 10:18, 11-02-2009 | #4 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Здравствуйте все! Спасибо gora! Натолкнуло на мысли... ещё подредактировал его скрипт, и вот что получилось:
@Echo off SetLocal EnableExtensions EnableDelayedExpansion REM Скрипт создает переменные среды с именами и значениями параметров. REM Каждый параметр должен начинатся с имени, перед которым стоит знак "/", "-" или "\". Значение параметра следует за именеи через разделительный знак (по умолчанию - пробел). REM Имеет два служебных параметра: REM cDelims - знак, разделяющий имя параметра и его значение. По умолчанию - пробел. Для изменения знака первым параметром нужно передать "cDelims <знак>": Set cDelims= REM cTraceParams=1 включает отображение параметров и их значений при разборе: Set cTraceParams= SET EXCLAMATION=^^! Set cParamName= Set /A cParamNum=0 Set cParReturnStr= :CmdLine If %1#==# GoTo :Cont Set P=%1 for /f "tokens=1,2 delims=%cDelims%" %%i in ("!P!") do ( Set cFirstPart=%%i Set cParamIdent=!cFirstPart:~0,1! Set cNameFound=0 if defined cParamIdent ( if "!cParamIdent!"=="/" Set cNameFound=1 if "!cParamIdent!"=="-" Set cNameFound=1 if "!cParamIdent!"=="\" Set cNameFound=1 ) if !cNameFound! EQU 1 ( REM Якщо знайшли iдентифiкатор параметра то опис попереднього параметра закiнчився, приймаємо його: call :AcceptLastParam Set cParamName=!cFirstPart:~1! Set !cParamName!=%%~j ) else ( if defined cParamName ( REM echo Була назва "!cParamName!" REM Додаємо слово до параметра (якщо значення вказано без лапок): Set cValue= call :getvalue !cParamName! cValue REM Set cValue=!TmpVar! Set cValueContinuation= call :DelSemicolons !P! cValueContinuation if defined cValue ( Set !cParamName!=!cValue! !cValueContinuation! ) else ( Set !cParamName!=!cValueContinuation! ) ) else ( echo Неожиданное значение !P!... ) ) ) Shift GoTo :CmdLine :AcceptLastParam if defined cParamName ( REM Якщо задали параметер "cTraceParams" - вiдображаємо параметри: if defined cTraceParams ( if !cTraceParams! EQU 1 ( call :ShowParam ) ) REM Формуємо рядок передачi параметрiв з цього скрипта на рiвень вище: call :AcceptParam ) exit /b :AcceptParam REM Варiант 1: вписуємо iмена змiнних щоб потiм повернути їх як глобальнi: if defined cParReturnStr ( Set cParReturnStr=!cParReturnStr! ^& ^(SET !cParamName!=!EXCLAMATION!!cParamName!!EXCLAMATION!^) ) else ( Set cParReturnStr=^(SET !cParamName!=!EXCLAMATION!!cParamName!!EXCLAMATION!^) ) exit /b :ShowParam Set cParamValue= call :getvalue !cParamName! cParamValue if defined cParamValue ( Set /A cParamNum=!cParamNum!+1 echo. echo !cParamNum!: !cParamName!=!cParamValue! ) else ( echo !cParamNum!: для "!cParamName!" значение ещё не найдено... ) exit /b :getvalue Set %2=!%1! exit /b :DelSemicolons Set %2=%~1 exit /b :ReturnParameters Set %2="%~1" exit /b :Cont REM Читання останнього параметра закiнчилося, приймаємо його: call :AcceptLastParam Set ParResStr= REM Розкриваємо вписанi iмена змiнних в їхнi значення. Беремо все в лапки щоб не розпiзнавалося тут як команда..: Call :ReturnParameters "!cParReturnStr!" ParResStr EndLocal & %ParResStr:~1,-1% Правда, как и раньше, требует доработки для передачи спецсимволов в значениях параметров. Может кому-то пригодится для чего-нибудь доброго... ![]() |
|
Отправлено: 12:33, 24-05-2014 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Установка - [решено] Как через cmd отключить параметры схемы питания? | Milagro | Microsoft Windows 7 | 3 | 21-12-2011 19:01 | |
Разное - [решено] перезагрузка из .bat или .cmd | San_dr | Программирование и базы данных | 7 | 03-08-2011 01:58 | |
CMD/BAT - [решено] разница между bat и cmd | alexandri | Скриптовые языки администрирования Windows | 2 | 11-01-2010 22:29 | |
CMD/BAT - [решено] Параметры сети через BAT. как? | Pozia | Скриптовые языки администрирования Windows | 1 | 04-11-2009 20:36 | |
Как передать параметры из формы с множественным значением | koresaram | Вебмастеру | 3 | 22-07-2006 13:06 |
|