Comillas en la orden START del intérprete de comandos de Windows

Hace unos días me llamó la atención una consulta en el grupos de noticias de Windows XP sobre cómo ejecutar varios programas secuencialmente desde un archivo .BAT (procesamiento por lotes), de forma que la ejecución de cada programa se produzca sólo cuando termine el anterior. Otro compañero de los foros sugirió usar la orden START con el parámetro /WAIT, que es perfectamente válida para ese propósito.

Ejemplo:

start /wait programa1.exe
start /wait programa2.exe
start /wait programa3.exe

El usuario que inició aquel hilo agradeció la respuesta y la puso en práctica. Expuso en el grupo una posible solución que había desarrollado y se le hizo un comentario acerca de unas comillas sin texto entre el parámetro /WAIT y el programa a ejecutar, similares a las que se ven aquí:

start /wait "" "programa.exe"

Puesto que aún no encuentro inspiración para completar el desarrollo de otros asuntos que quiero tratar aquí y no deseo tener una sola entrada en este mes de julio de 2007 que ahora termina, reproduzco a continuación mi respuesta en el foro sobre el propósito de esas comillas. He unido los dos mensajes originales, he modificado el texto ligeramente y he añadido un poco de formato (negrita, ancho fijo, etc.).

Las primeras comillas son necesarias si también se encierra entre comillas la ubicación del archivo que se va a ejecutar. START interpreta el primer parámetro entrecomillado, excluyendo el que pueda suceder a la opción /D, como el título que va a asignar a la ventana de consola, no como la ubicación del archivo a ejecutar. Es obligatorio incluso si el programa no es de tipo consola (en ese caso carecerá de efecto). Si se elimina ese parámetro entrecomillado, el resultado no será el esperado.

Por tanto, estos ejemplos no son equivalentes:

START /WAIT "bah" "%programfiles%\internet explorer\iexplore.exe" -nohome
START /WAIT "%programfiles%\internet explorer\iexplore.exe" -nohome

La primera línea ejecuta Internet Explorer sin abrir la página de inicio. El texto entrecomillado “bah” es irrelevante, puesto que Iexplore.exe no es un programa de consola.

En la segunda línea, START interpreta “%programfiles%\internet explorer\iexplore.exe” como título de ventana y -nohome como archivo a ejecutar. Podéis imaginar el resultado. 🙂

En cambio, estos ejemplos son equivalentes:

START "bah" /WAIT "%programfiles%\internet explorer\iexplore.exe" -nohome
START /WAIT "bah" "%programfiles%\internet explorer\iexplore.exe" -nohome

El orden del parámetro de título con respecto a las demás opciones no tiene importancia, teniendo cuidado en un caso: la opción /D y el argumento que le acompaña forman un todo (la opción /D, que no se usa habitualmente, permite definir el directorio inicial de la aplicación).

Finalmente, estos ejemplos tendrían el resultado esperado suponiendo que los archivos existieran:

START cmd.exe
START f:\rutasinespacios\programasinespacios.exe
START "" cmd.exe
START "" f:\rutasinespacios\programasinespacios.exe

Moraleja: si se pasa a START un parámetro de archivo que va entrecomillado, necesario si la ubicación o el nombre del archivo pueden contener espacios, hay que anteponer otro parámetro entrecomillado aunque sólo sean las comillas vacías.

Este asunto de las comillas puede acarrear problemas de interoperabilidad con plataformas basadas en Windows 9x (Windows 95/98/Millennium), ya que START está mucho más limitado. Si se utiliza START en un archivo .BAT destinado tanto a sistemas Windows NT (Windows NT/2000/XP/2003/Vista…) como a sistemas Windows 9x, conviene separar la ejecución en dos ramas según la variable de entorno OS: en sistemas Windows 9x no está definida, mientras que en sistemas NT vale Windows_NT.

Ejemplo:

if "%OS%" == "Windows_NT" goto nt
rem código específico para Windows 95/98/ME
...
goto :fin
:nt
rem código específico para Windows NT/2000/etc.
...
:fin

Otra solución consiste crear dos archivos .BAT, uno para los Windows 9x y el otro para los Windows NT, y mantener ambos por separado. Por supuesto, sería muy aconsejable comprobar al principio el valor de la variable OS para evitar problemas si se ejecuta accidentalmente alguno de los archivos .BAT en una plataforma distinta a la deseada.

7 thoughts on “Comillas en la orden START del intérprete de comandos de Windows

  1. Esta técnica de las comillas no la puedo utilizar para ejecutar un programa directamente Ej.:
    Tengo que ejecutar la siguiente orden para hacer un backup con el programa svnadmin.exe que se encuentra en la ruta C:Archivos de programaSubversionbin, la orden la ejecuté así:
    C:Archivos de programaSubversionbinsvnadmin.exe hotcopy “G:RepositorioSVNConfiabilidad” “G:RepositorioSVNConfiabilidad_backup”
    y la consola me dice (“C:Archivos” no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable.), la solución que utilice fue cargar la ruta (C:Archivos de programaSubversionbin) en le path de las variables de entorno y lo ejecute cono sigue a continuación (svnadmin.exe hotcopy “G:RepositorioSVNConfiabilidad” “G:RepositorioSVNConfiabilidad_backup”), mi pregunta es: Como podria ejecutar el programa haciendo referencia a el junto con la ruta de acceso ?

  2. Hola muchas gracias… muy pero muy util tu post, me ayudo a avanzar en un proyecto que estoy realizando.. Gracias! Saludos desde Ecuador!

  3. ¿El error puede ser “no se encuentra c:archivos”? La ruta c:archivos de programa contiene espacios, por lo tanto para que Start la interprete correctamente son obligatorias las comillas. Sin embargo, Start.exe entiende de forma especial el primer parámetro entrecomillado que no sea una opción ni el programa a ejecutar. Esta orden sí funcionará:
    START “” “c:archivos de programa”

  4. hola

    como puedo ejecutar cualquier cosa con start remotamente?

    ejemplo:

    start file://miip/unidad/carpeta/archivo.xyz

    me explico?

    entiendo que solo sirve si mi ip no cambia, solo que no entiendo como acceder a la unidad y ruta

    gracias

    [Edición: dirección de correo electrónico suprimida]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *