Здравствуйте все! Спасибо
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%
Теперь скрипт можно вызывать из другого скрипта, передавая ему именованные параметры. Также теперь значения параметров могут содержать пробелы и не быть заключены в кавычки (впрочем, для передачи, например, знаков препинания кавычки нужно ставить). Можно изменять знак между именем и значением при вызове скрипта. В ответ скрипт создаст переменные с соответствующими именами и значениями.
Правда, как и раньше, требует доработки для передачи спецсимволов в значениях параметров.
Может кому-то пригодится для чего-нибудь доброго...
