¿Cuál es la diferencia entre los siguientes scripts cmd?

10

Intenté iniciar varios programas a través de un archivo por lotes y encontré problemas, pero eso fue en el pasado.

Soy relativamente nuevo en scripts y líneas de comando y esta sería mi pregunta: ¿Cuál es la diferencia entre los siguientes scripts de cmd?

Este es aceptado

Start Chrome

(Supongo que algunos programas instalados se reconocen por título, a pesar de que el directorio no está donde se ejecuta el programa chrome.exe, ¿las claves de registro juegan un papel importante en esto?)

este también funciona

cd "FOO_DIR"
start FOO.exe

sin embargo estos no

start "FOO_DIR\FOO.exe"

(abre una nueva ventana sin iniciar FOO.exe)

start /B "FOO_DIR\FOO.exe"

(vuelve a escribir el texto de copyright y no hace nada más)

(SO Windows 7 x64)

Señor Smith
fuente

Respuestas:

17
Start Chrome

Este funciona, porque el ejecutable de Chrome se encuentra en una carpeta que está en la PATHvariable de entorno. startbusca programas en todas las carpetas en esa variable. La variable de entorno PATHEXTcontiene una lista de extensiones de archivo para buscar y, como .exeestá contenida de manera predeterminada, no necesita escribir chrome.exe.


start "FOO_DIR\FOO.exe"

Esto no funciona, porque startusará su primer argumento como título de la ventana si se cita. Entonces esto abrirá un nuevo CMD con "FOO_DIR\FOO.exe"su título.

Para evitar esto, simplemente puede agregar un argumento de título vacío antes de su comando:

start "" "FOO_DIR\FOO.exe"
crater2150
fuente
Además, AFAIR, el título es obligatorio cuando se ejecutan ejecutables con modificadores de línea de comandos
abstrask
1
No es que startespere un título como su primer argumento (de lo contrario start chromeno funcionaría), es que si se cita su primer argumento, espera que sea un título.
jamesdlin
@jamesdlin ah, la documentación sobre esto es un poco vaga, gracias. Edité la respuesta en consecuencia
crater2150
5

Intente agregar "title"o al menos ""después de startesta manera:

start "title" "FOO_DIR\FOO.exe"

o

start "title" /B  "FOO_DIR\FOO.exe"

La causa raíz del problema es que el primer argumento en "" comillas se interpreta como un titleparámetro para una nueva cmdventana.

También ayuda mirar la referencia de comando (enlace)

Art Gertner
fuente
Gracias, eso aclaró la diferencia. Y con el primero, creo que "los archivos no ejecutables pueden invocarse a través de su asociación de archivos simplemente escribiendo el nombre del archivo como un comando". es la razón por la cual solo el nombre es suficiente ... (aunque no estoy seguro)
Sr. Smith
Si está hablando de su primer ejemplo con start chrome, creo que llamar a Chrome funciona, porque tiene una entrada en el registro en algún lugar aquí: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ App Paths Si busca chrome.exe, lo más probable es que encuentre la entrada que contiene la ruta completa al ejecutable.
Art Gertner