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 se explica el comando call, que ejecuta otro archivo por lotes desde un archivo por lotes: su uso básico, la diferencia con ejecutarlo sin call, cómo pasar argumentos y cómo llamar etiquetas, con código de ejemplo.

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]

Especifique el nombre del archivo por lotes y los parámetros que se le pasarán. La extensión (.cmd o .bat) se puede omitir, pero escribirla evita ejecutar un archivo no deseado cuando hay archivos con el mismo nombre.

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ó.

Sin call, el control no regresa

Si escribe el nombre de otro archivo por lotes sin call (por ejemplo, solo callee.cmd), el procesamiento pasa a ese archivo y no regresa al archivo que lo llamó. Use siempre call si desea que se ejecuten los comandos restantes del archivo que llama.

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) 2026 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) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>caller.cmd
caller.cmd ha comenzado.
callee.cmd ha comenzado.
Es la ejecución número 1.
callee.cmd ha terminado.
callee.cmd ha comenzado.
Es la ejecución número 2.
callee.cmd ha terminado.
caller.cmd ha terminado.
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

Recibir el código de salida del archivo llamado

Cuando el archivo llamado termina con exit /b <número>, ese valor se establece en ERRORLEVEL. El archivo que llama puede comprobarlo justo después de call para saber si tuvo éxito.

@echo off

call callee.cmd
if errorlevel 1 (
    echo callee.cmd ha fallado.
    exit /b 1
)

echo callee.cmd terminó correctamente.

Para más información sobre exit /b, consulte la siguiente página.

Llamar a una etiqueta del mismo archivo por lotes

call también puede llamar a una etiqueta del mismo archivo en lugar de a otro archivo. Anteponga : al nombre de la etiqueta y termine la subrutina con exit /b para regresar al llamador.

@echo off

call :greet Taro
call :greet Hanako

exit /b

:greet
echo Hola, %1.
exit /b
- □ ×
Ícono de la consola de comandos
Consola de comandos
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>sample.cmd
Hola, Taro.
Hola, Hanako.
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.

Resumen

  • Para ejecutar otro archivo por lotes y volver al llamador, use call
  • Pase los argumentos después del nombre del archivo, como en call callee.cmd 1, y recíbalos con %1
  • Llame a una etiqueta del mismo archivo con call :etiqueta y regrese con exit /b
  • Para ejecutar sin esperar a que termine, use start

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 #call #Argumentos #Línea de comandos #Comando