Windows-Verknüpfungszielparameter, der mit einem @ beginnt

12

Ich habe eine Windows-Anwendung, die ich mit einer Desktopverknüpfung und einigen Befehlszeilenparametern aufrufen muss.

Ich habe das schon tausend Mal gemacht, aber das hier ist ein bisschen anders. Anstelle eines normalen Befehlszeilenparameters wie -e 12345oder -example 12345wird dieser verwendet @12345(beginnend mit dem @Symbol).

Windows-Verknüpfungen mögen diesen Parameter nicht, der unmittelbar nach dem Namen der ausführbaren Datei steht, und er entfernt einfach alles. Ich weiß nicht warum.

Beispielsweise:

c:\example\example.exe @12345 -e9876Wenn Sie als "Ziel" speichern, werden alle Parameter entfernt und c:\example\example.exedas Ziel bleibt erhalten .

Funktioniert aber c:\example\example.exe -e9876 @12345 prima. Es speichert und validiert und alles ist gut.

Allerdings muss der @Parameter der erste im Befehl sein. Wie kann ich ein @Symbol als ersten Befehlszeilenparameter für eine Windows-Verknüpfung festlegen, abgesehen davon, dass der Befehl in eine Batchdatei eingeschlossen und der Batch aufgerufen wird?

Mark Henderson
quelle
1
Die andere Möglichkeit besteht darin, die Parameter (einzeln) zu zitieren, sofern das Programm dies unterstützt. Interessantes Verhalten, das ich gerade beim Testen festgestellt habe: Die Parameter wurden aus dem Zielfeld entfernt, aber sie werden immer noch an das Zielprogramm übergeben! Tatsächlich bleiben die jetzt unsichtbaren Parameter erhalten, bis Sie das Feld erneut bearbeiten und die .lnkDateien tatsächlich unterschiedlich sind. (Getestet mit dem Ziel als Batch-Datei, die die übergebenen Parameter einfach wiedergibt.)
Bob

Antworten:

13

Wer wusste? ... Windows behandelt das @Zeichen anscheinend als Trennzeichen. Windows-Befehle interpretieren nur das erste Element im Befehl, sodass der Rest effektiv abgeschnitten wird. Anscheinend können Sie das Verhalten außer Kraft setzen, indem Sie ein ^davor angeben, um dem Symbol zu entkommen .

dh

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

TheCompWiz
quelle
3
Hallo! Es klappt! Wie um alles in der Welt haben Sie aus Neugier die Antwort darauf gefunden?
Mark Henderson
3
Dunkle Postings vergangener Jahre. Einige Personen verwiesen auf Dokumente, die es nicht mehr gibt (oder die zumindest nicht leicht zu finden sind), und erwähnten einige dieser Leckerbissen. Er erwähnte auch Dinge wie $und %Zeichen, die andere Probleme verursachen können. Sie können die mit dem gleichen ^Charakter entkommen . Sie können der Flucht auch entkommen, indem Sie das tun, ^^was Sie erwarten.
TheCompWiz
4
@MarkHenderson Das Caret-Symbol "^" ist das Standardsymbol "Escape the Next Character", das von der gesamten WIN32-API (und späteren 64-Bit-APIs) verwendet wird, da (wenn ich mich richtig erinnere) mindestens NT 3.5 (ja: Ich werde alt) ). Es funktioniert an nahezu jedem Ort in Windows, an dem Sie eine Befehlszeile bereitstellen können: CMD-Skripte / Eingabeaufforderung, Windows + R-Ausführungsfeld, Verknüpfungen in den Befehlszeilen für Dienste und geplante Aufgaben, um nur einen zu nennen wenige.
Tonny