У меня есть сценарий 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 без интерпретации специальных символов оболочки?