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.

Published 31/7/2007 16:45 por Ramón Sola
Comparte este post:

Comentarios

# Peni said on 31 July, 2007 09:22 PM

No había visto ese hilo y es muy muy interesante. este me lo guardo :-)

# Pedro said on 08 February, 2008 02:38 PM

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 programa\Subversion\bin, la orden la ejecuté así:

C:\Archivos de programa\Subversion\bin\svnadmin.exe hotcopy "G:\RepositorioSVN\Confiabilidad" "G:\RepositorioSVN\Confiabilidad_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 programa\Subversion\bin\) en le path de las variables de entorno y lo ejecute cono sigue a continuación (svnadmin.exe hotcopy "G:\RepositorioSVN\Confiabilidad" "G:\RepositorioSVN\Confiabilidad_backup"), mi pregunta es: Como podria ejecutar el programa haciendo referencia a el junto con la ruta de acceso ?

# Ramón Sola said on 08 February, 2008 06:44 PM

"C:\Archivos de programa\Subversion\bin\svnadmin.exe" también debe estar entrecomillado.

# Bernardo Leon said on 24 August, 2009 09:53 PM

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

# javier said on 15 October, 2009 09:12 PM

hola. por que en esta linea de sale error

START c:\archivos de programa

y en esta no?

START c:\windows

# Ramón Sola said on 18 October, 2009 08:32 AM

¿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"

# cristian said on 02 February, 2010 01:38 AM

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]

Licencia

El contenido de este blog se ofrece bajo el siguiente tipo de licencia de Creative Commons:

Creative Commons License

Búsqueda

Ir

Este blog

Sindicación

Notas

  • Por decisión del administrador, los visitantes que no inicien sesión (visitantes anónimos) no podrán enviar comentarios a los blogs de Geeks.ms, para lo cual deberán registrar una cuenta de usuario e identificarse a través de la misma. Disculpen las molestias que esto pueda causarles.

Acerca de los contenidos

La información ofrecida en este blog se proporciona tal cual, sin garantías de ningún tipo, y no otorga ningún derecho. Usted asume el riesgo de poner en práctica cuantos procedimientos se expongan aquí. En particular, si ha venido buscando alguna solución para una tarea o duda escolar y no le ha servido el contenido, por favor no me eche la culpa. ;-)

Las anotaciones del blog representan una visión válida en el momento en que fueron publicadas o actualizadas. Más allá de esas fechas no se puede garantizar la veracidad de la información expuesta ni la exactitud o fiabilidad de los enlaces.

Los comentarios son responsabilidad exclusiva de sus autores respectivos. El dueño del blog se reserva el derecho de editar, eliminar o no publicar aquellos comentarios que a su criterio infrinjan reglas básicas de respeto y convivencia en la red. En el caso de la edición, se expondrá claramente esta circunstancia y el motivo de la misma. El dueño del blog podrá asimismo borrar los enlaces que se desvíen demasiado de los temas tratados, muestren intenciones de autopromoción (publicidad descarada, spam...) o en general no inspiren confianza. Las direcciones de correo electrónico serán eliminadas o alteradas para reducir la posibilidad de que sean objeto de spam. El envío de comentarios implica la adhesión a estas condiciones.

Etiquetas

Archivo

Colegas en Geeks.ms

Otros bloggers españoles

Bloggers de Microsoft

Herramientas interesantes

Geeks.ms

Mi blog personal

Webs y comunidades amigas