Cómo crear un archivo por lotes en Windows usando "iniciar" con una ruta y comando con espacios

78

Necesito crear un archivo por lotes que inicie varias aplicaciones de consola en un archivo .cmd de Windows. Esto se puede hacer usando el comando de inicio.

Sin embargo, el comando tiene una ruta. También necesito pasar parámetros que también tienen espacios. ¿Como hacer esto?

Por ejemplo, archivo por lotes

start "c:\path with spaces\app.exe" param1 "param with spaces"

fuente

Respuestas:

165

En realidad, su ejemplo no funcionará (aunque al principio pensé que también funcionaría). Según la ayuda del comando Inicio, el primer parámetro es el nombre de la ventana del símbolo del sistema recién creada, y el segundo y el tercero deben ser la ruta a la aplicación y sus parámetros, respectivamente. Si agrega otro "" antes de la ruta de la aplicación, debería funcionar (al menos a mí me funcionó). Usa algo como esto:

start "" "c:\path with spaces\app.exe" param1 "param with spaces"

Puede cambiar el primer argumento para que sea el que desee que sea el título del nuevo símbolo del sistema. Si se crea una aplicación de Windows, el símbolo del sistema no se mostrará y el título no importará.

Andy
fuente
Parece que el título de la ventana es obligatorio, aunque hay mucha documentación en Internet que indica lo contrario. Ignore esa documentación. Siga la sugerencia de Andy.
Corin
Si ingreso un comando de aplicación de Windows desde un interactivo, la aplicación se inicia en segundo plano y veo un nuevo mensaje. Si ejecuto el mismo comando desde un script por lotes, la aplicación se inicia en primer plano; mi secuencia de comandos por lotes se detiene hasta que salgo de la aplicación. ¡Eek! Intenté durante mucho tiempo usar start para ejecutar mi aplicación en segundo plano, pero start /B "app"no funcionó y start cmd /C "app"me da una consola extraña. ¡¡Gracias!! Finalmente me doy cuenta de que necesito un título de ventana para mi inicio sin ventana. Esto funciona: start /B "" "app"
Keith Robertson
¡Gracias! ¡El caso es real incluso con el /waitparámetro especificado! start /wait "%CDir%\cron.exe" -q -removeno funciona mientras que start "" /wait "%CDir%\cron.exe" -q -removesí.
Viernes
Si hubiera encontrado su respuesta más tarde, podría salvarme el día ((. ¡Pero de todos modos, gracias!
Denis Petrov
15

Es correcto escapar de la ruta con apóstrofos, pero el comando de inicio toma un parámetro que contiene el título de la nueva ventana. Este parámetro es detectado por los apóstrofos circundantes, por lo que su aplicación no se ejecuta.

Intente algo como esto:

start "Dummy Title" "c:\path with spaces\app.exe" param1 "param with spaces"
Steffen
fuente
2
start "" "c:\path with spaces\app.exe" "C:\path parameter\param.exe"

Cuando utilicé la sugerencia anterior, obtuve:

'c: \ ruta' no se reconoce como un comando interno o externo, un programa operable o un archivo por lotes.

Creo que la segunda marca de qoutation evita que se ejecute el comando. Después de buscar una solución a continuación, salve mi día:

start "" CALL "c:\path with spaces\app.exe" "C:\path parameter\param.exe"
Mustafa Kemal
fuente
Cree un archivo vacío test 2.bat, luego cree un archivo test1.batcon esto: START "Test title" "test 2.bat" %*- ahora ejecute test1.bat "param 1"y no funcionará, ¿por qué?
ale5000
1

Curiosamente, parece que en Windows Embedded Compact 7, no puede especificar una cadena de título. El primer parámetro tiene que ser el comando o programa.

Mark Agate
fuente
0

Debes usar algo como esto:

inicio / d C: \ Windows \ System32 \ calc.exe

start / d "C: \ Archivos de programa \ Mozilla

Firefox "firefox.exe inicio / d

"C: \ Archivos de programa \ Microsoft

Office \ Office12 "EXCEL.EXE

También te aconsejo que uses un editor de archivos por lotes especial - Dr.Batcher

user243871
fuente
-1

Rodear la ruta y el argumento con espacios entre comillas como en su ejemplo debería ser. El comando puede necesitar manejar las comillas cuando se le pasan los parámetros, pero generalmente no es un gran problema.

Curro
fuente
-1

Investigué con éxito y me está funcionando bien. Mi requisito es enviar un correo electrónico usando vbscript que debe llamarse desde un archivo por lotes en Windows. Aquí está el comando exacto que estoy usando sin errores.

START C:\Windows\System32\cscript.exe "C:\Documents and Settings\akapoor\Desktop\Mail.vbs"
Anupam Kapoor
fuente
Esto está mal. Puedes escribir START "" "C:\Documents and Settings\akapoor\Desktop\Mail.vbs". Su código solo funciona porque vbs es una extensión que se resuelve cuando lo "inicia". Intente llamar a notepad.exe con la ruta, no funcionará. Siempre ejecutará el script.
Samuel