Pase los argumentos de la línea de comandos a Windows "Abrir con"

28

Tengo un programa que se abre con un acceso directo específico, pero el acceso directo parece enviar parámetros a la aplicación. Si voy directamente al directorio de destino y hago doble clic, no funciona. Sin embargo, si uso la línea de comando y paso cierto argumento, la aplicación se abre correctamente.

Quiero abrir ciertos tipos de archivos usando la aplicación, pero la aplicación debe tener los parámetros, o no funcionará. ¿Es posible hacer este tipo de cosas?

jtpereyda
fuente
¿Qué versión de Windows estás usando?
iglvzx
Estoy usando Windows 7.
jtpereyda
1
Esto tiene mejores soluciones: superuser.com/questions/136133/...

Respuestas:

20

Me encontré con el mismo problema que @jtpereyda y la solución de @bobbymcr tampoco funcionó para mí. Intenté pasar todos los parámetros de la línea de comandos a los scripts de node.js sin necesitar node.exe en el comando.

El problema es que si ya ha asociado el programa con la extensión a través del Open Withcuadro de diálogo, habrá creado una asociación de aplicación, en lugar de una asociación de extensión de archivo, entre los dos. Y las asociaciones de aplicaciones tienen prioridad.

Si no le importa editar el registro, puede modificar la (Default)clave en la siguiente ruta:

HKEY_CLASSES_ROOT\Applications\node.exe\shell\open\command

Debe reemplazarlo node.execon la aplicación que está ajustando.

O simplemente puede eliminar la carpeta de la aplicación de la HKEY_CLASSES_ROOT\Applicationscarpeta por completo y su ftypeasociación comenzará a funcionar.

Asegúrese de usar el %*que pasará en los argumentos restantes de la línea de comandos no especificados o nada en absoluto. Si lo hace "%2" "%3" "%4" "%5", obtendrá 5 parámetros de cadena vacíos pasados ​​a su aplicación cuando no especifique ningún argumento de línea de comando.

Finalmente, si no está de acuerdo con modificar el registro a mano, puede usar una herramienta gratuita de Nirsoft - FileTypesManager - http://www.nirsoft.net/utils/file_types_manager.html

Las asociaciones de archivos aparecerán en la parte superior de la lista, sin ningún texto en la primera columna de extensión. Simplemente encuentre el nombre del ejecutable en la lista y selecciónelo para modificar el command linecampo para el opennombre de la acción.

En windows7 los cambios se reflejaron inmediatamente sin reiniciar o reiniciar la aplicación. Sin embargo, la utilidad Nirsoft tiene una función para "Actualizar el escritorio" en cualquier modificación, por lo que me hace creer que quizás Vista o las versiones anteriores del sistema operativo almacenarían en caché los datos. En ese caso, la utilidad sería una mejor apuesta, de lo contrario, es posible que deba cerrar sesión e iniciar sesión para ver los cambios.

Marcus Pope
fuente
1
como nota: parece que% 1 siempre debe usarse para pasar el archivo asociado al programa. El uso directo de% * parece no funcionar. Al menos tengo un problema con mi ".pl" - asociación perl en mi victoria 7
vlad_tepesch
1
Lo hice funcionar por prueba y error, lo que resultó en el siguiente valor de datos: "C:\Program Files\nodejs\node.exe" "%1"%*NOTA: el %*valor NO está entre comillas, y no tiene espacio entre él y la comilla doble anterior.
Michael Paulukonis
También eliminé la clave HKEY_CLASSES_ROOT\.ulawen el regedit en caso de que .ulawsea ​​la extensión de los archivos para los que estaba haciendo el procedimiento.
Matt
¿Cómo podemos pasar los argumentos (decir 'prueba') al abrir?
Apparao
Cambie esta respuesta para modificar explícitamente "[HKLM | HKCU] \ Software \ Classes", según el contexto de instalación. No modifique HKCR directamente. Consulte las "consideraciones importantes" para los tipos de archivos y el HKEY_CLASSES_ROOTartículo. Es un malentendido comprensible dado que gran parte de la documentación de Microsoft es anterior a la vista fusionada para HKCR que se introdujo alrededor de Windows 2000.
Eryk dom
10

Puede hacer esto con assocy ftypeen el símbolo del sistema. Abra un símbolo del sistema elevado e intente lo siguiente:

ftype MyFileType = C: \ MyDir \ MyProgram.exe / arg1 / arg2 "% 1"
assoc .xyz = MyFileType

Esto asociará la .xyzextensión MyProgram.exey pasará la línea de comando /arg1 /arg2 [filename.xyz]al programa para ejecutarla.

bobbymcr
fuente
1
Aceptado porque esta parece ser la respuesta correcta de lo que he investigado. Sin embargo, este proceso parece ineficaz en el sistema que estoy usando. Puedo usar ftype y assoc para verificar que los cambios pasaron, pero no afecta el programa utilizado para abrir archivos. ¿Quizás el proceso ha cambiado en Windows 7?
jtpereyda
El uso de la respuesta de Marcus Pope hace que funcione correctamente de mi lado con Windows 7. Estaba tratando de reproducir el .ulawarchivo con soxargumentos predefinidos de él. Tenga en cuenta que además de eliminar la aplicación anterior, también eliminé la HKEY_CLASSES_ROOT\.ulawque definía el tipo de archivo.
Matt
CMD assocy ftypeson comandos heredados. No se actualizaron para las extensiones de las asociaciones de archivos agregadas en Windows XP, 7 y 8. Solo modifican las claves de asociación de archivos y ProgId bajo la clave del sistema "HKLM \ Software \ Classes". No leen ni modifican la configuración de HKCU por usuario, que tiene prioridad, o las subclaves más nuevas, como "Aplicaciones" y "Asociaciones de archivos de sistema", o claves de capacidades por aplicación de "RegisteredApplications". Tampoco leen ni modifican la elección del usuario en "HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts".
Eryk dom
3

La persona que hace la pregunta informa que la mejor respuesta en realidad no funciona.

Lo descubrí para XP, que podría aplicarse a un sistema operativo posterior.

En un indicador de cmd, necesita dos comandos: assoc, ftype.

Estos dos pueden mostrar lo que está asociado y luego editar la asociación, pero hay un giro, las instrucciones de MS parecen estar equivocadas / incompletas. Fui alertado de esto al notar un estilo de asociación indocumentado por aplicaciones veteranas conocidas, ¿por qué?

Este ejemplo permite que se pasen muchos argumentos al programa asociado.

ftype name_of_assoc="C\blah\aprog.exe" "%1" "%*"

No es un error tipográfico "%1" "%*". El porcentaje de estrella no funcionará sin el porcentaje anterior 1 .

Y eso se activa de inmediato, no es necesario cerrar sesión, etc.

Hecho bien pasará 3 a arg []

myfile.wotsit file1 file2 file3

No lo he hecho, pero parece que las siguientes citas externas pasarían -m si el programa necesita una bandera.

ftype name_of_assoc="C\blah\aprog.exe" -m "%1" "%*"
Tim Channon
fuente
No creo que esto sea correcto. El uso de comillas alrededor de "% *" hará que la lista de argumentos se pase como un solo argumento. Además, te perdiste los dos puntos después de la letra de unidad. El comando correcto debería ser: ftype name_of_assoc = "C: \ blah \ aprog.exe" -m "% 1"% *
Usuario0
Estoy usando el excelente programa FilesTypeMan, ¡y en este caso lo necesitas %1 %* sin comillas ! malditas ventanas
Jean-François Fabre
2

Tuve un problema similar con una versión anterior de PSP con Windows7

Esta solución (cambiar la línea de comando shell \ open \ en el Registro) funcionó PERO tenía que tener la sintaxis "C: \ MyFolderName \ PSP.EXE"% 1 SIN COTIZACIONES ALREDEDOR% 1 de lo contrario, esto se interpreta como una constante

Denis
fuente
1
¿Por qué los votos negativos? ¡Esta respuesta me ayudó finalmente a obtener el comando correcto!
ylka
GRACIAS - Tenía las citas y no estaba funcionando
Fiona - myaccessible.website
1

No es la mejor solución, pero la más fácil es usar un archivo por lotes.

Cree un archivo bat como ese y configure su programa predeterminado para su extensión de archivo. Y sí, la cita vacía después del inicio es necesaria:

{nombre de la aplicación} .bat

    start "" "{app path}" %1 /edit

Ejemplo:

BCompareEdit.bat

    start "" "C:\Program Files\Beyond Compare 4\BCompare.exe" %1 /edit
Xtro
fuente
1
Esta es la única solución que funcionó para mí en Windows 10. Me ayuda a iniciar Word 2013 con la opción / w para tener una nueva instancia en cada lanzamiento, que es necesaria para usar Word con escritorios virtuales.
vicmortelmans
0

Aquí hay una extensión que parece hacer exactamente lo que quieres. Nunca lo he usado antes, pero parece obtener buenas críticas. deja un comentario si hay problemas.

soandos
fuente
-1

Cree un acceso directo de Windows y use la siguiente plantilla:

"C:\Windows\system32\mspaint.exe" "c:\data\basejpg.jpg" %1
usuario835699
fuente
2
¿Y cómo usa esto el usuario para abrir un archivo como xyz.jpg?
G-Man dice 'Reincorporar a Monica' el
Preguntó cómo cambiar el registro para lograr esto.
lanza el