Paramètre cible de raccourci Windows commençant par un @

12

J'ai une application Windows que je dois invoquer avec un raccourci sur le bureau et certains paramètres de ligne de commande.

Je l'ai fait des milliers de fois, mais celui-ci est un peu différent. Au lieu d'utiliser un paramètre de ligne de commande normal comme -e 12345ou -example 12345, celui-ci utilise @12345(en commençant par le @symbole).

Les raccourcis Windows n'aiment pas que ce paramètre apparaisse immédiatement après le nom de l'exécutable, et il supprime simplement tout. Je ne sais pas pourquoi.

Par exemple:

c:\example\example.exe @12345 -e9876comme "cible", lors de la sauvegarde, supprime tous les paramètres et reste c:\example\example.execomme la cible.

Mais c:\example\example.exe -e9876 @12345 fonctionne très bien. Il enregistre et valide, et tout va bien.

Cependant, j'ai besoin que le @paramètre soit le premier de la commande. En plus de faire quelque chose comme encapsuler la commande dans un fichier de commandes et appeler le lot, comment puis-je avoir un @symbole comme premier paramètre de ligne de commande sur un raccourci Windows?

Mark Henderson
la source
1
L'autre option consiste à citer les paramètres (individuellement), en supposant que ledit programme le supporte. Comportement intéressant que je viens de découvrir lors des tests, cependant: les paramètres ont disparu du champ Cible mais ils sont toujours passés au programme cible! En fait, les paramètres désormais invisibles sont conservés jusqu'à ce que vous modifiiez à nouveau le champ, et les .lnkfichiers sont en fait différents. (Testé avec la cible en tant que fichier de commandes qui fait simplement écho aux paramètres transmis.)
Bob

Réponses:

13

Qui savait? ... Windows traite apparemment le @personnage comme un délimiteur. Les commandes Windows interpréteront uniquement le premier élément de la commande ... afin de tronquer efficacement le reste. Apparemment, vous pouvez remplacer le comportement en fournissant un ^avant pour échapper au symbole.

c'est à dire

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

TheCompWiz
la source
3
Hey! Ça marche! Par curiosité, comment diable avez-vous trouvé la réponse à cela?
Mark Henderson
3
Deeeep affichages sombres des années passées. Une personne a fait référence à des documents qui n'existent plus (ou du moins pas faciles à trouver) et a mentionné certaines de ces friandises. Il a également mentionné des choses comme les caractères $et %qui peuvent causer d'autres problèmes. Vous pouvez échapper à ceux qui utilisent le même ^personnage. Vous pouvez également échapper à l'évasion en faisant ce ^^que vous attendez.
TheCompWiz
4
@MarkHenderson Le symbole Caret "^" est le symbole standard "échapper le caractère suivant" utilisé par l'ensemble de l'API WIN32 (et plus tard 64 bits) depuis (si je me souviens bien) au moins NT 3.5 (oui: je vieillis) ). Il fonctionne à peu près partout dans Windows où vous pouvez fournir une ligne de commande: scripts / invite CMD, boîte d'exécution WIndows + R, raccourcis, dans les lignes de commande associées aux services et aux tâches planifiées, pour ne nommer qu'un peu.
Tonny