Как избежать интерпретации cmd.exe специальных символов оболочки, таких как <> ^

У меня есть сценарий Windows CMD, который принимает ряд параметров и выполняет EXE, передавая сначала некоторые жестко запрограммированные аргументы, а затем все параметры от пользователя. Сценарий CMD выглядит следующим образом:

launcher.exe paramX paramY %*

Пользователь должен выполнить сценарий CMD из оболочки Windows следующим образом:

launcher.cmd param1 param2 param3 [...]

У меня проблема заключается в том, что если параметры сценария CMD содержат специальные символы оболочки, такие как < > и ^ , пользователь вынужден избегать их, предварительно каждый с 3 символами каретки ^ оболочки.

Два примера

1) Чтобы передать аргумент десять> один в EXE, пользователь должен запустить CMD следующим образом :

launcher.cmd ten^^^>one

Причина в том, что специальные символы оболочки ^ и > интерпретируются командной оболочкой на двух уровнях: первый в командной строке, а второй - внутри сценария CMD. . Таким образом, оболочка, экранирующая символ вставки ^ , должна применяться дважды. Проблема в том, что это неочевидно для пользователя и выглядит некрасиво.

В этом примере Лучшее решение - заключить аргумент в двойные кавычки. Однако это не подходит для более сложных примеров, которые включают буквальную двойную кавычку в аргументе.

2) Чтобы передать аргумент "^ в EXE, пользователь должен запустить CMD следующим образом:

launcher.cmd "\"^^^^"

В моем случае я хочу поддержать аргументы, содержащие любую последовательность младших символов ASCII, исключая управляющие символы, то есть кодовые точки от 0x20 до 0x7E. Я понимаю, что будут примеры, когда пользователю придется уйти определенные специальные символы оболочки с кареткой. Однако я не хочу, чтобы пользователь использовал 3 каретки каждый раз в этих случаях только потому, что они вызывают сценарий CMD вместо EXE.

Я могу решить эту проблему, заменив сценарий CMD на EXE, который делает то же самое. Однако есть ли способ изменить сценарий CMD так, чтобы он передавал свои параметры в EXE без интерпретации специальных символов оболочки?

12
задан Paul Urban 29 September 2010 в 17:23
поделиться