Целевой параметр ярлыка Windows, начинающийся с @

12

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

Я делал это тысячи раз, но этот немного другой. Вместо использования обычного параметра командной строки , такого как -e 12345или -example 12345, используется этот @12345(начиная с @символа).

Ярлыкам Windows не нравится, когда этот параметр идет сразу после имени исполняемого файла, и он просто удаляет все. Я не знаю почему.

Например:

c:\example\example.exe @12345 -e9876в качестве «цели» при сохранении удаляет все параметры и оставляет c:\example\example.exeв качестве цели.

Но c:\example\example.exe -e9876 @12345 работает просто отлично. Это сохраняет и проверяет, и все хорошо.

Однако мне нужно, чтобы @параметр был первым в команде. Помимо выполнения команды, например, оборачивания команды в пакетный файл и вызова пакета, как сделать так, чтобы @символ был первым параметром командной строки в ярлыке Windows?

Марк Хендерсон
источник
1
Другой вариант - заключить в кавычки параметры (индивидуально), предполагая, что упомянутая программа поддерживает это. Интересное поведение, которое я только что обнаружил при тестировании: параметры удалены из поля Target, но все еще передаются целевой программе! Фактически, теперь невидимые параметры сохраняются до тех пор, пока вы снова не отредактируете поле, а .lnkфайлы на самом деле будут другими. (Протестировано с целью в виде пакетного файла, который просто повторяет переданные параметры.)
Боб

Ответы:

13

Кто знал? ... Windows, по-видимому, рассматривает @символ как разделитель. Команды Windows будут интерпретировать только первый элемент команды ... поэтому он эффективно усекает остальные. Очевидно, вы можете переопределить поведение, указав ^перед ним символ экранирования .

т.е.

c:\example\example.exe ^@12345 -e9876

TheCompWiz
источник
3
Привет! Оно работает! Из любопытства, как же ты нашел ответ на этот вопрос?
Марк Хендерсон
3
Глубокие темные сообщения прошлых лет. Кто-то упомянул документы, которые больше не существуют (или, по крайней мере, их нелегко найти), и упомянул некоторые из этих лакомых кусочков. Он также упомянул такие вещи, как $и %символы, которые могут вызвать другие проблемы. Вы можете избежать тех, кто использует тот же ^символ. Вы также можете избежать побега, сделав, ^^как вы могли ожидать.
TheCompWiz
4
@MarkHenderson Символ каретки «^» является стандартным символом «экранировать следующий символ», используемым тогда всем WIN32 (и более поздним 64-разрядным) API, поскольку (если я правильно помню) по крайней мере NT 3.5 (да: я старею ). Он работает практически в любом месте Windows, где вы можете указать командную строку: CMD-scripts / prompt, окно запуска WIndows + R, ярлыки, в командных строках, связанных со службами и запланированными задачами, просто назвать несколько.
Тонни