У меня есть CMD Windows script, который принимает несколько параметров и выполняет EXE, передавая сначала некоторые жестко закодированные аргументы, а затем все параметры от пользователя. CMD script выглядит следующим образом:
launcher.exe paramX paramY %*
Пользователь выполнил бы CMD script из оболочки Windows следующим образом:
launcher.cmd param1 param2 param3 [...]
Проблема заключается в том, что если параметры CMD script содержат специальные символы оболочки, такие как <
>
и ^
, пользователь вынужден уйти от них, если каждый из них имеет 3 каретки ^
символы запуска оболочки.
Два примера
1) Чтобы передать аргумент ten>one
в EXE, пользователь должен запустить CMD следующим образом:
launcher.cmd ten^^^>one
Причиной этого является то, что специальные символы оболочки ^
и >
интерпретируются командной оболочкой на двух уровнях: сначала в командной строке, а затем внутри CMD script. Таким образом, экранирование оболочки с символом escape-последовательности каретки ^
должно применяться дважды. Проблема в том, что это неочевидно для пользователя и выглядит уродливым.
В этом примере более приятным решением является окружение аргумента двойными кавычками. Тем не менее, это ломается для более сложных примеров, которые включают буквальную двойную кавычку в аргументе.
2) Чтобы передать аргумент "^
в EXE, пользователь должен запустить CMD следующим образом:
launcher.cmd "\"^^^^"
В моем случае я хочу поддерживать аргументы, содержащие любую последовательность символов с низким ASCII, за исключением управляющих символов, то есть кодовых точек от 0x20 до 0x7E. Я понимаю, что будут примеры, когда пользователю придется избегать специальных символов оболочки с кареткой. Тем не менее, я не хочу, чтобы пользователю приходилось использовать 3 каретки каждый раз в этих случаях только потому, что они, как правило, вызывают CMD script вместо EXE.
Я могу решить эту проблему, заменив CMD script на EXE, который делает то же самое. Однако есть ли способ изменить CMD script, чтобы он передавал свои параметры через EXE без интерпретации специальных символов оболочки?