Script por lotes: depuración

Muy a menudo, puede tener problemas al ejecutar archivos por lotes y, en la mayoría de los casos, necesitará depurar sus archivos por lotes de una forma u otra para determinar el problema con el archivo por lotes en sí. A continuación, se muestran algunas de las técnicas que pueden ayudar a depurar archivos de Batch Script.

Error de mensajes

Para descubrir el origen del mensaje, siga estos pasos:

Step 1 - REM fuera de la línea @ECHO OFF, es decir, REM @ECHO OFF o :: @ECHO OFF.

Step 2 - Ejecute el archivo por lotes con los parámetros de línea de comando requeridos, redirigiendo toda la salida a un archivo de registro para su posterior comparación.

test.bat > batch.log 2>&1

Step 3 - Busque en el archivo batch.log los mensajes de error

Step 4- Verifique la línea anterior para ver si hay algún comando inesperado o no válido, cambio (es) de línea de comando o valor (es); preste especial atención a los valores de las variables de entorno utilizadas en el comando.

Step 5 - Corrija el error y repita este proceso hasta que desaparezcan todos los mensajes de error.

Líneas de comando complejas

Otra fuente común de errores son los comandos redirigidos incorrectamente, como por ejemplo los comandos FIND o FINDSTR "anidados" con cadenas de búsqueda incorrectas, a veces dentro de un bucle FOR / F.

Para verificar la validez de estos comandos complejos, siga estos pasos:

Step 1 - Inserte "líneas de verificación de comandos" justo antes de una línea que utiliza el conjunto de comandos complejo.

A continuación se muestra un ejemplo en el que se inserta el comando ECHO para marcar dónde termina la salida del primer comando TYPE y comienza el siguiente.

TYPE %Temp%.\apipaorg.reg
ECHO.================================================ TYPE %Temp%.\apipaorg.reg 
| FIND 
"[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\"

Step 2 - Siga el procedimiento para encontrar las fuentes de mensajes de error descritas anteriormente.

Step 3- Preste especial atención a la salida de las líneas de comando "simplificadas": ¿Es la salida del formato esperado? ¿El valor o la posición del "token" es el esperado?

Subrutinas

Las subrutinas que generan mensajes de error plantean un "desafío" adicional para encontrar la causa del error, ya que se pueden llamar varias veces en el mismo archivo por lotes.

Para ayudar a averiguar qué causa la llamada incorrecta a la subrutina, siga estos pasos:

Step 1 - Agregar y restablecer una variable de contador al comienzo del script -

SET Counter = 0

Step 2 - Incrementar el contador cada vez que se llame a la subrutina, insertando la siguiente línea al comienzo de la subrutina

SET /A Counter+=1

Step 3- Inserte otra línea justo después del incremento del contador, que contenga solo el comando SET; esto listará todas las variables de entorno y sus valores.

Step 4 - Siga el procedimiento para encontrar las fuentes de mensajes de error descritas anteriormente.

Versiones de Windows

Si tiene la intención de distribuir sus archivos por lotes a otras computadoras que pueden o no ejecutar la misma versión de Windows, deberá probar sus archivos por lotes en tantas versiones de Windows como sea posible.

El siguiente ejemplo muestra cómo verificar varias versiones del sistema operativo para verificar las versiones relevantes de Windows.

@ECHO OFF
:: Check for Windows NT 4 and later

IF NOT "%OS%"=="Windows_NT" GOTO DontRun
:: Check for Windows NT 4
VER | FIND "Windows NT" >NUL && GOTO DontRun
:: Check for Windows 2000
VER | FIND "Windows 2000" >NUL && GOTO DontRun
:: Place actual code here . . .
:: End of actual code . . .
EXIT

:DontRun
ECHO Sorry, this batch file was written for Windows XP and later versions only