call - Ejecutar otros archivos por lotes

Mantenido el

A medida que se amplía el uso de archivos por lotes, es común que existan múltiples archivos por lotes que realizan procesos similares dentro de un programa.

En tales casos, es ineficiente escribir el mismo proceso en varios archivos por lotes, y también aumenta el esfuerzo de mantenimiento.

Además, es común en el uso de archivos por lotes llamar a múltiples archivos por lotes creados por separado desde un archivo por lotes de ejecución programada.

En esta página, explicamos de manera clara cómo ejecutar otros archivos por lotes desde un archivo por lotes, desde el uso básico hasta la configuración de opciones.

Uso básico del comando call

Para llamar a otros archivos por lotes desde un archivo por lotes, use el comando call.

El uso básico del comando call es el siguiente:

call <nombre_del_archivo_por_lotes> [...parámetros]

No hay opciones, solo especifique el nombre del archivo por lotes y los parámetros que se pasarán a ese archivo por lotes.

Cuando se usa el comando call, se ejecuta el archivo por lotes especificado y, una vez completado, regresa al archivo por lotes que lo llamó.

Ejemplo específico del comando call

Ejecución de otro archivo por lotes

Como ejemplo, preparemos caller.cmd que se ejecuta directamente y callee.cmd que se llama.

caller.cmd será como sigue:

@echo off

echo caller.cmd ha comenzado.

call callee.cmd

echo caller.cmd ha terminado.
Si ocurre un problema de codificación

Asegúrese de que la codificación del archivo sea Shift-JIS.

De manera similar, callee.cmd será como sigue:

@echo off

echo callee.cmd ha comenzado.

echo callee.cmd ha terminado.

Después de configurar lo anterior, al ejecutar caller.cmd, se mostrará lo siguiente:

×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>caller.cmd
caller.cmd ha comenzado.
callee.cmd ha comenzado.
callee.cmd ha terminado.
caller.cmd ha terminado.
C:\users\user>

Cuando se ejecuta caller.cmd, el comando call ejecuta callee.cmd, y después de que callee.cmd se completa, vuelve a caller.cmd.

De esta manera, al usar el comando call, el archivo por lotes que llama espera hasta que se complete el archivo por lotes llamado.

Pasar argumentos y ejecutar un archivo por lotes

A continuación, se explica cómo pasar argumentos y ejecutar un archivo por lotes.

Prepare caller.cmd para ejecutar directamente y callee.cmd para ser llamado.

caller.cmd será como sigue:

@echo off

echo caller.cmd ha comenzado.

call callee.cmd 1

call callee.cmd 2

echo caller.cmd ha terminado.

callee.cmd se describe de la siguiente manera.

@echo off

echo callee.cmd ha comenzado.

echo Es la ejecución número %1.

echo callee.cmd ha terminado.

Después de configurar como se indicó anteriormente, ejecute caller.cmd y se mostrará lo siguiente.

×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>caller.cmd
caller.cmd ha comenzado.
callee.cmd ha comenzado.
1
callee.cmd ha terminado.
callee.cmd ha comenzado.
2
callee.cmd ha terminado.
caller.cmd ha terminado.
C:\users\user>

Si desea lograr el procesamiento en paralelo

Al llamar a un archivo por lotes, puede haber ocasiones en las que desee ejecutar el siguiente proceso sin esperar a que se complete el archivo por lotes llamado.

Cuando usa el comando call, espera a que se complete el archivo por lotes llamado antes de ejecutar el siguiente proceso.

Si desea ejecutar el siguiente proceso sin esperar a que se complete, use el comando start.

El comando start se explica en detalle en la siguiente página.

Ejercicio

Problema de práctica

Hay dos archivos por lotes, caller.cmd y callee.cmd. En este estado, cuando ejecuta caller.cmd, ¿cuál es el tercer mensaje que se muestra mediante el comando echo?

caller.cmd
@echo off

echo caller.cmd ha comenzado.

call callee.cmd

echo caller.cmd ha terminado.
callee.cmd
@echo off

echo callee.cmd ha comenzado.

echo callee.cmd ha terminado.
回答がサーバーに送信されることはありません
#Símbolo del sistema #Archivo por lotes #Argumentos #Línea de comandos #Comando