Parámetro de destino de acceso directo de Windows que comienza con una @

12

Tengo una aplicación de Windows que necesito invocar con un acceso directo de escritorio y algunos parámetros de línea de comandos.

Lo he hecho miles de veces, pero este es un poco diferente. En lugar de usar un parámetro de línea de comando normal como -e 12345o -example 12345, éste usa @12345(comenzando con el @símbolo).

A los atajos de Windows no les gusta que este parámetro aparezca inmediatamente después del nombre del ejecutable, y simplemente elimina todo. No se porque.

Por ejemplo:

c:\example\example.exe @12345 -e9876como el "objetivo", al guardar, elimina todos los parámetros y se va c:\example\example.execomo el objetivo.

Pero c:\example\example.exe -e9876 @12345 funciona bien. Guarda y valida, y todo está bien.

Sin embargo , necesito que el @parámetro sea el primero en el comando. Además de hacer algo como envolver el comando en un archivo por lotes y llamar al lote, ¿cómo puedo hacer que un @símbolo sea el primer parámetro de línea de comando en un acceso directo de Windows?

Mark Henderson
fuente
1
La otra opción es citar los parámetros (individualmente), suponiendo que dicho programa lo respalde. Sin embargo, el comportamiento interesante que acabo de encontrar en las pruebas: ¡los parámetros han desaparecido del campo Objetivo pero aún se pasan al programa objetivo! De hecho, los parámetros ahora invisibles se conservan hasta que vuelva a editar el campo y los .lnkarchivos sean realmente diferentes. (Probado con el objetivo como un archivo por lotes que simplemente hace eco de los parámetros pasados).
Bob

Respuestas:

13

¿Quien sabe? ... Windows aparentemente trata al @personaje como un delimitador. Los comandos de Windows solo interpretarán el primer elemento del comando ... por lo que efectivamente trunca el resto. Aparentemente, puede anular el comportamiento al proporcionar un ^antes para escapar del símbolo.

es decir

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

TheCompWiz
fuente
3
¡Oye! ¡Funciona! Por curiosidad, ¿cómo demonios encontraste la respuesta a eso?
Mark Henderson
3
Deeeep publicaciones oscuras de antaño. Alguna persona hizo referencia a documentos que ya no existen (o al menos no son fáciles de encontrar) y mencionó algunos de esos datos. También mencionó cosas como los caracteres $y %que pueden causar otros problemas. Puedes escapar de aquellos que usan el mismo ^personaje. También puede escapar del escape haciendo ^^lo que podría esperar.
TheCompWiz 01 de
44
@MarkHenderson El símbolo de Caret "^" es el símbolo estándar de "escapar del siguiente carácter" utilizado por toda la API de WIN32 (y más tarde de 64 bits) ya que (si recuerdo correctamente) al menos NT 3.5 (sí: me estoy haciendo viejo ) Funciona en casi cualquier lugar de Windows donde puede proporcionar una línea de comandos: CMD-scripts / prompt, cuadro de ejecución de Windows + R, atajos, en las líneas de comandos asociadas con servicios y tareas programadas, solo por nombrar un pocos.
Tonny