Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Разбор параметров командной строки, содержащих символ *

Ответить
Настройки темы
CMD/BAT - [решено] Разбор параметров командной строки, содержащих символ *

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: zip Cmd.zip
(1006 байт, 5 просмотров)
Добрый день.
Задача состоит в следующем. Необходимо сформировать массив 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

Отправлено: 12:33, 26-03-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата tech-gs:
Необходимо сформировать массив ARG##, состоящий из принятых скриптом параметров командной строки, »
В чём проблема-то?
Скрытый текст
Код: Выделить весь код
@echo off

set /a iNum = 0

:Repeat
set sVar=%~1
set /a iNum += 1
set sNum=0%iNum%

if defined sVar (
	set ARG%sNum:~-2%=%sVar%
	shift
	goto :Repeat
)

set ARG

exit /b 0

Код: Выделить весь код
C:\Мои проекты\0003>0001.cmd Мама мыла раму 1*2 3#4 567 Седьмой Восьмой Девятый Десятый Одиннадцатый
ARG01=Мама
ARG02=мыла
ARG03=раму
ARG04=1*2
ARG05=3#4
ARG06=567
ARG07=Седьмой
ARG08=Восьмой
ARG09=Девятый
ARG10=Десятый
ARG11=Одиннадцатый
Цитата tech-gs:
а так же сформировать переменную CMDARG, состоящую из всех принятых параметров. »
Код: Выделить весь код
set CMDARG=%*
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:27, 26-03-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата tech-gs:
В закомментированном цикле for обрабатывается столько параметров, сколько принято, но видимо из-за (%*) теряются параметры »


Нет, не из-за этого. Символ "*" в "%*" не влияет на потерю параметров, содержащих символ "*". На потерю параметров влияет именно особенность разбора командой "FOR" элементов с символами "*", а также и с символами "?".

Дело в том, что использование команды "FOR" без ключей изначально рассчитано на обработку файлов в качестве элементов набора, а символы "*" и "?" в этом случае являются подстановачными символами.

Команда "FOR" без ключей, обрабатывая элемент набора, содержащий символы "*" и "?", ищет файлы, подпадающие под этот шаблон, и не найдя таковых, выдаёт пустой результат.

Интересно, что если файлы, подпадающие под такой шаблон, будут обнаружены, то обрабатываться будет именно список этих файлов, что может привести к большим неожиданностям в результатах выполнения пакетного файла...
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:41, 26-03-2016 | #3


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
В чём проблема-то? »
Действительно, проблемы нет.
Подозревал, что найдется совершенно иной подход. Все работает, спасибо!

Отправлено: 13:45, 26-03-2016 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Разбор параметров командной строки, содержащих символ *

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Запуск командной строки от имени Администратора из командной строки emcee Microsoft Windows 8 и 8.1 12 06-05-2023 07:36
CMD/BAT - запуск командной строки от имени администратора из командной строки jah Скриптовые языки администрирования Windows 18 19-09-2015 08:59
Интернет - Изменение параметров интернет подключения с командной строки или Powershell termikx Скриптовые языки администрирования Windows 5 14-10-2013 15:46
CMD/BAT - CMD/BAT разбор строки с символом перехода строки в конце. Alex1254 Скриптовые языки администрирования Windows 0 19-09-2013 19:24
[решено] Импорт в реестр параметров, содержащих переменные в значениях Wu-Tang Автоматическая установка Windows 2000/XP/2003 36 10-01-2012 09:36




 
Переход