¿Cómo es el comando START con una opción WAIT?
START /wait notepad.exe
START /wait notepad.exe
... algo diferente de usar un comando CALL?
CALL notepad.exe
CALL notepad.exe
¿Existe una situación en la que uno puede comportarse de manera diferente que el otro depende de lo que se está ejecutando?
windows
batch-file
Chad
fuente
fuente
Respuestas:
Para los archivos exe , supongo que las diferencias son casi sin importancia.
Pero para comenzar un exe que ni siquiera necesitas
CALL
.Al comenzar otro lote es una gran diferencia,
ya que
CALL
lo iniciará en la misma ventana y el lote llamado tiene acceso al mismo contexto variable.Por lo tanto, también puede cambiar las variables que afectan a la persona que llama.
START
creará un nuevo cmd.exe para el lote llamado y sin / b abrirá una nueva ventana.Como es un contexto nuevo, las variables no se pueden compartir.
Las diferencias
Uso
start /wait <prog>
: los cambios de las variables de entorno se pierden cuando
<prog>
finaliza: la persona que llama espera
<prog>
que finaliceUso
call <prog>
: para exe se puede omitir, porque es igual a solo comenzar
<prog>
: para un exe-prog, el lote de la persona que llama espera o inicia el exe de forma asincrónica, pero el comportamiento depende del propio exe .
- Para los archivos por lotes , el lote de la persona que llama continúa, cuando se llama
<batch-file>
finaliza , SIN llamar al control no volverá al lote de la persona que llamaApéndice:
El uso
CALL
puede cambiar los parámetros (para archivos por lotes y exe), pero solo cuando contienen signos de porcentaje o signos de porcentaje.Se expandirá a (desde un archivo por lotes)
fuente
start /wait /b cmd /c <batchfile.bat>
debido a que los archivos por lotes se ejecutan uno tras otro en la misma ventana de comandoscall batchfile.bat
Creo que en general deberían funcionar igual, pero hay algunas diferencias.
START
generalmente se usa para iniciar aplicaciones o para iniciar la aplicación predeterminada para un tipo de archivo determinado. De esa manera, si noSTART http://mywebsite.com
lo haceSTART iexplore.exe http://mywebsite.com
.START myworddoc.docx
iniciaría Microsoft Word y abriría myworddoc.docx.CALL myworddoc.docx
hace lo mismo ... sin embargo,START
ofrece más opciones para el estado de la ventana y cosas de esa naturaleza. También permite establecer la prioridad del proceso y la afinidad.En resumen, dadas las opciones adicionales proporcionadas por start, debería ser su herramienta de elección.
fuente
Hay una diferencia útil entre
call
ystart /wait
cuando se llama,regsvr32.exe /s
por ejemplo, también referenciada por Gary en su respuesta a cómo-do-obtengo-la-aplicación-código-de-salida-desde-una-línea-de-comando-windowssiempre devolverá 0 pero
devolverá el nivel de error de regsvr32.exe
fuente
Esto es lo que encontré al ejecutar archivos por lotes en paralelo (varias instancias del mismo archivo bat al mismo tiempo con diferentes parámetros de entrada):
Digamos que tiene un archivo exe que realiza una tarea larga llamada LongRunningTask.exe
Si llama al exe directamente desde el archivo bat, solo se realizará la primera llamada a LongRunningTask, mientras que el resto obtendrá un error del sistema operativo "El proceso ya está usando el archivo"
Si usa este comando:
inicio / B / WAIT "" "LongRunningTask.exe" "parámetros"
Podrá ejecutar varias instancias del bat y exe, mientras espera que la tarea finalice antes de que el bat continúe ejecutando los comandos restantes. La opción / B es evitar crear otra ventana, las comillas vacías son necesarias para que el comando funcione, consulte la referencia a continuación.
Tenga en cuenta que si no usa / WAIT al principio, LongRunningTask se ejecutará al mismo tiempo que los comandos restantes en el archivo por lotes, por lo que podría crear problemas si uno de estos comandos requiere la salida de LongRunningTask
Reanudando:
Esto no puede ejecutarse en paralelo:
Esto se ejecutará en paralelo y estará bien siempre que no existan dependencias de datos entre la salida del comando y el resto del archivo bat:
Esto se ejecutará en paralelo y esperará a que termine la tarea, para que pueda usar la salida:
Referencia para el comando de inicio: ¿Cómo puedo ejecutar un programa desde un archivo por lotes sin dejar la consola abierta después del inicio del programa?
fuente
Llamada
Llama a un programa por lotes desde otro sin detener el programa por lotes principal. El comando de llamada acepta etiquetas como destino de la llamada. La llamada no tiene efecto en la línea de comandos cuando se usa fuera de un script o archivo por lotes. https://technet.microsoft.com/en-us/library/bb490873.aspx
comienzo
Inicia una ventana separada del símbolo del sistema para ejecutar un programa o comando específico. Utilizado sin parámetros, inicio abre una segunda ventana de símbolo del sistema. https://technet.microsoft.com/en-us/library/bb491005.aspx
fuente
Este es un hilo viejo, pero acabo de encontrarme con esta situación y descubrí una forma clara de solucionarla. Estaba tratando de ejecutar un setup.exe, pero el enfoque volvía a la siguiente línea del script sin esperar a que finalizara el setup.exe. Probé las soluciones anteriores sin suerte.
Al final, canalizar el comando más hizo el truco.
setup.exe {argumentos} | más
fuente