![]() |
Разбор параметров командной строки, содержащих символ *
Вложений: 1
Добрый день.
Задача состоит в следующем. Необходимо сформировать массив ARG##, состоящий из принятых скриптом параметров командной строки, а так же сформировать переменную CMDARG, состоящую из всех принятых параметров. Особенность принимаемых параметров в том, что они могут содержать символы '*', '#' и '.'. Задачу удалось решить двумя вариантами, но в обоих присутствуют свои "грабли". В закомментированном цикле for обрабатывается столько параметров, сколько принято, но видимо из-за (%*) теряются параметры, содержащие символ *. Во втором цикле for параметры с символом * обрабатываются нормально, но получается использовать только 9 параметров, т.к. 10-ый параметр передается в :PARAMSET как 1-ый & 0, 11-ый - как 2-ой & 0 и т.д. Помогите собрать воедино оба кода, чтобы обрабатывались все принятые параметры, в т.ч. содержащие *. Для удобства прикрепляю готовые к тестированию файлы (см. cmd.zip). Код:
set ARG01=- |
Цитата:
Скрытый текст
Код:
@echo off Код:
C:\Мои проекты\0003>0001.cmd Мама мыла раму 1*2 3#4 567 Седьмой Восьмой Девятый Десятый Одиннадцатый Цитата:
Код:
set CMDARG=%* |
Цитата:
Нет, не из-за этого. Символ "*" в "%*" не влияет на потерю параметров, содержащих символ "*". На потерю параметров влияет именно особенность разбора командой "FOR" элементов с символами "*", а также и с символами "?". Дело в том, что использование команды "FOR" без ключей изначально рассчитано на обработку файлов в качестве элементов набора, а символы "*" и "?" в этом случае являются подстановачными символами. Команда "FOR" без ключей, обрабатывая элемент набора, содержащий символы "*" и "?", ищет файлы, подпадающие под этот шаблон, и не найдя таковых, выдаёт пустой результат. Интересно, что если файлы, подпадающие под такой шаблон, будут обнаружены, то обрабатываться будет именно список этих файлов, что может привести к большим неожиданностям в результатах выполнения пакетного файла...:):):) |
Цитата:
Подозревал, что найдется совершенно иной подход. Все работает, спасибо! |
Время: 09:28. |
Время: 09:28.
© OSzone.net 2001-