Uso de archivos por lotes, Parte 3: El comando IF
Este consejo continúa la serie sobre el uso de archivos por lotes. Se sugiere que (re) visite los consejos anteriores para que podamos continuar donde lo dejamos. Hasta ahora hemos cubierto los siguientes comandos: DIR, REM, ECHO, FIND, TIME y TIMEOUT. También hemos utilizado los siguientes operadores: salida a archivo (>), comentario (: :), sin eco (@), canalización (|) y concatenar (&).
Finalmente, sabemos que usamos parámetros pasados a un archivo por lotes a través de las combinaciones% 1,% 2,% 3, etc.
Este consejo se centrará en los comandos relacionados con la realización de procesamiento condicional en un archivo por lotes. Estos incluyen IF, CHOICE, GOTO y la sintaxis especial de «: etiqueta».
Tengo un archivo por lotes muy útil llamado Do.bat. Es poco más que un «contenedor» que ejecuta programas independientemente de dónde residan estos programas.
Entonces, por ejemplo, si quiero ejecutar el programa llamado Prog1.exe, simplemente escribiría
C:\Bat> DO Prog1
Si quisiera ejecutar Prog2.exe, escribiría
C:\Bat> DO Prog2
La belleza de Do.bat es que cuando lo creé, ingresé las ubicaciones de todos los programas con los que quiero que funcione. Así que no tengo que recordar, por ejemplo, que Prog1.exe vive en «C: \ Programas \ Mis programas \ Prog1.exe» y que Prog2.exe vive en «D: \ Utilities \ Barry \ Prog2.exe» . Además, nunca más tendré que escribir esos nombres de rutas largas.
Mi archivo Do.bat se ve así:
@ECHO OFF GOTO %1 :Prog1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Prog2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :Done
La primera línea del archivo garantiza que no se mostrarán las otras líneas. Le sigue la línea GOTO, que toma como parámetro el nombre de la etiqueta a la que se va a transferir el control. Y sucede que esta etiqueta también es el parámetro que se pasó a Do.bat para empezar. Entonces, cuando invoca Do.bat y pasa «Prog1» como parámetro, el archivo .bat hace un GOTO a una etiqueta llamada «: Prog1» (estos no distinguen entre mayúsculas y minúsculas). La ejecución sigue secuencialmente de arriba a abajo, por lo que el siguiente comando a ejecutar es el que invoca Prog1.exe. Una vez finalizado este programa, el archivo .bat continúa ejecutando el comando «GOTO Done». La etiqueta «: Listo» es la última línea del archivo, por lo que cuando llega a este punto, el archivo .bat sale. (Hay un comando EXIT, pero si lo ejecutamos, terminaría no solo el archivo .bat sino también toda la sesión CMD, que probablemente no es lo que desea hacer).
Alternativamente, podría usar el comando CHOICE y quizás crear un menú simple desde el cual elegir qué programa ejecutar. En este caso, podría crear un archivo llamado Choice.bat que se vería así:
@ECHO OFF ECHO Select 1 to run Prog1 ECHO Select 2 to run Prog2 ECHO Select Q to quit CHOICE /C 12Q /T 10 /D Q GOTO %ERRORLEVEL% :3 ECHO Quitting GOTO Done :2 "D:\Utilities\Barry\Prog2.exe" GOTO Done :1 "C:\Programs\My Programs\Prog1.exe" GOTO Done :Done
El comando CHOICE proporciona al usuario un mensaje para ingresar un 1, 2 o Q (por defecto, no distingue entre mayúsculas y minúsculas). Cualquier otro carácter se ignora. El interruptor / T dice que se agote el tiempo de espera en 10 segundos, momento en el cual el procedimiento se comportará como si se seleccionara la opción Q (/ D Q dice que la opción predeterminada es Q). Después de que se ejecuta el comando CHOICE, la variable% ERRORLEVEL% se establece en el valor ordinal de la opción seleccionada. Entonces, si el usuario seleccionó 1,% ERRORLEVEL% se establece en 1; si el usuario seleccionó 2,% ERRORLEVEL% se establece en 2; y si el usuario seleccionó Q,% ERRORLEVEL% se establece en 3. Luego GOTO la etiqueta indicada por% ERRORLEVEL% y realizamos la acción solicitada.
Podría escribir un consejo completo sobre el comando IF, pero lo básico es que hagas algo como:
IF arg1 operator arg2 command
donde ‘arg1’ y ‘arg2’ son argumentos que se están probando, ‘operador’ es uno de EQU, NEQ, LSS, LEQ, GTR, GEQ (es decir, EQUal, Not Equal, LeSS than, etc.) y ‘command’ es un comando de línea de comandos.
Un archivo por lotes simple para hacer eco de P1, si hay uno, podría verse así:
@ECHO OFF IF [%1] EQU [] ECHO No Parameter passed IF [%1] NEQ [] ECHO Parameter P1 is '%1' GOTO:eof
(Me acostumbré a usar [] en mis argumentos para evitar ciertas complicaciones.)
También hay otros sabores de IF. Por ejemplo, puede probar un nivel de error, probar si existe un archivo, incluir una declaración ELSE, etc.
En la línea de comando, haga un IF /? y obtendrá una buena idea de todo lo que puede hacer.
Este consejo (13185) se aplica a Windows 7, 8 y 10.