tech-gs
26-03-2016, 12:33
Добрый день.
Задача состоит в следующем. Необходимо сформировать массив ARG##, состоящий из принятых скриптом параметров командной строки, а так же сформировать переменную CMDARG, состоящую из всех принятых параметров. Особенность принимаемых параметров в том, что они могут содержать символы '*', '#' и '.'.
Задачу удалось решить двумя вариантами, но в обоих присутствуют свои "грабли".
В закомментированном цикле for обрабатывается столько параметров, сколько принято, но видимо из-за (%*) теряются параметры, содержащие символ *.
Во втором цикле for параметры с символом * обрабатываются нормально, но получается использовать только 9 параметров, т.к. 10-ый параметр передается в :PARAMSET как 1-ый & 0, 11-ый - как 2-ой & 0 и т.д.
Помогите собрать воедино оба кода, чтобы обрабатывались все принятые параметры, в т.ч. содержащие *.
Для удобства прикрепляю готовые к тестированию файлы (см. cmd.zip).
set ARG01=-
set CMDARG=-
set /a c=1
::for %%i in (%*) do (
:: call :PARAMSET %%i
::)
for /l %%i in (1,1,11) do (
call :PARAMSET %%%%i
)
exit /b
:PARAMSET
echo par%c%='%1'
if not '%1'=='' (
if '!CMDARG!'=='-' set CMDARG=
if %c% LSS 10 (set num=0%c%) else (set num=%c%)
set ARG!num!=%1
set CMDARG=!CMDARG! %1
set /a c=c+1
)
goto :EOF
Задача состоит в следующем. Необходимо сформировать массив ARG##, состоящий из принятых скриптом параметров командной строки, а так же сформировать переменную CMDARG, состоящую из всех принятых параметров. Особенность принимаемых параметров в том, что они могут содержать символы '*', '#' и '.'.
Задачу удалось решить двумя вариантами, но в обоих присутствуют свои "грабли".
В закомментированном цикле for обрабатывается столько параметров, сколько принято, но видимо из-за (%*) теряются параметры, содержащие символ *.
Во втором цикле for параметры с символом * обрабатываются нормально, но получается использовать только 9 параметров, т.к. 10-ый параметр передается в :PARAMSET как 1-ый & 0, 11-ый - как 2-ой & 0 и т.д.
Помогите собрать воедино оба кода, чтобы обрабатывались все принятые параметры, в т.ч. содержащие *.
Для удобства прикрепляю готовые к тестированию файлы (см. cmd.zip).
set ARG01=-
set CMDARG=-
set /a c=1
::for %%i in (%*) do (
:: call :PARAMSET %%i
::)
for /l %%i in (1,1,11) do (
call :PARAMSET %%%%i
)
exit /b
:PARAMSET
echo par%c%='%1'
if not '%1'=='' (
if '!CMDARG!'=='-' set CMDARG=
if %c% LSS 10 (set num=0%c%) else (set num=%c%)
set ARG!num!=%1
set CMDARG=!CMDARG! %1
set /a c=c+1
)
goto :EOF