Uso de archivos por lotes, Parte 4: La declaración CALL
Si no lo había adivinado hasta ahora, los archivos por lotes pueden servir como un tipo rudimentario de lenguaje de programación. Una cosa que ofrecen los lenguajes de programación modernos es la capacidad de modularizar el código en partes pequeñas para que, si cambia una parte, no se arriesgue a cambiar accidentalmente algún código no relacionado. Puede modularizar un archivo por lotes grande dividiéndolo en otros más pequeños y utilizando la instrucción CALL para invocar los módulos individuales según sea necesario.
Tomemos el caso de tener un sistema de menú que permite al usuario invocar cualquiera de una serie de funciones. Lo que haremos es poner cada una de las funciones en su propio archivo por lotes y usar la instrucción CALL en el archivo por lotes del menú principal para invocar la función seleccionada, que luego volvería al menú para permitir al usuario seleccionar otra función.
Así es como puede verse Menu.bat:
@ECHO OFF :TOP CLS ECHO Welcome to the Main Menu! Here are your choices... ECHO. ECHO A) Perform Function A B) Perform Function B ECHO C) Perform Function C D) Perform Function D ECHO. ECHO Q) Quit ECHO. CHOICE /C ABCDQ GOTO %ERRORLEVEL% :5 GOTO :EOF :4 CALL FuncD.bat GOTO TOP :3 CALL FuncC.bat GOTO TOP :2 CALL FuncB.bat GOTO TOP :1 CALL FuncA.bat GOTO TOP
Y así es como puede verse FuncA.bat:
ECHO This is Function A PAUSE
A pesar de que no sucede nada interesante aquí, es el comienzo de un marco decente para un sistema de menú basado en comandos. Y hay algunos elementos que deben tenerse en cuenta. Trabajando de arriba a abajo, el primer comando nuevo que encontramos es el comando CLS. Este simple comando simplemente limpia la pantalla para que nuestro menú siempre se vea bien por sí solo. El ojo perspicaz también notará algunas declaraciones de ECHO que son seguidas inmediatamente por un punto. Así es como genera una línea en blanco. Otro elemento nuevo es la etiqueta EOF incorporada. Esto prescinde de la necesidad de tener que declarar su propia etiqueta que existe como la última línea del archivo (como mi etiqueta «: Listo» utilizada en otros consejos).
Esto nos lleva a las declaraciones CALL. El parámetro especificado con CALL es el nombre del archivo por lotes que se invocará a continuación. Entonces, por ejemplo, si el usuario eligió la Opción A del menú, el archivo por lotes iría inmediatamente a la etiqueta: 1, lo que haría que FuncA.bat se invocara a continuación. Mi archivo FuncA.bat simplemente ECHO una línea y hace una PAUSA. La instrucción PAUSE genera una línea que dice «Presione cualquier tecla para continuar …». Luego suspende la ejecución del archivo por lotes hasta que el usuario presione una tecla. Una vez que se presiona una tecla, el archivo por lotes continúa, lo que en este caso significa que FuncA.bat termina y el control se reanuda en el archivo por lotes del menú principal en la línea inmediatamente posterior a la llamada a FuncA.bat. Entonces, lo siguiente que sucederá será el GOTO TOP, que comienza todo de nuevo.
Tenga en cuenta que no tiene que poner otro «@ECHO OFF» en la parte superior de FuncA.bat porque el estado ECHO se mantiene cuando se llama a FuncA.bat.
Este consejo (13187) se aplica a Windows 7, 8 y 10.