¿Cómo puedo depurar un script .BAT?
-
03-07-2019 - |
Pregunta
¿Hay una manera de pasar por un script .bat? La cuestión es que tengo un script de compilación, que llama a muchos otros scripts, y me gustaría ver cuál es el orden en que se llaman, para que pueda saber exactamente dónde debo ir y agregar mis modificaciones .
Solución
No sé de ninguna manera para avanzar en la ejecución de un archivo .bat, pero puede usar echo
y pause
para ayudar con la depuración.
ECHO
Se hará eco de un mensaje en el archivo por lotes. Como ECHO Hello World imprimirá Hello World en la pantalla cuando se ejecute. Sin embargo, sin @ECHO OFF al comienzo del archivo por lotes también obtendrá " ECHO Hello World " y "Hello World". Finalmente, si solo desea crear una línea en blanco, escriba ECHO. al agregar el período al final se crea una línea vacía.PAUSA
Indica al usuario que presione cualquier tecla para continuar.
Fuente: Ayuda de archivo por lotes
@ workmad3: answer tiene más buenos consejos para trabajar con el comando echo
.
Otro recurso útil ... DDB: Consejos para el archivo por lotes de DOS
Otros consejos
Asegúrese de que no haya declaraciones de 'echo off' en los scripts y llame a 'echo on' después de llamar a cada script para restablecer los que haya perdido.
La razón es que si se deja activado el eco, el intérprete de comandos emitirá cada comando (después del procesamiento de parámetros) antes de ejecutarlo. Hace que se vea realmente mal para su uso en producción, pero es muy útil para fines de depuración, ya que puede ver dónde se produjo un error en la salida.
Además, asegúrese de verificar los niveles de error establecidos por los scripts y programas llamados por lotes. Recuerde que hay 2 métodos diferentes utilizados en los archivos .bat para esto. Si llamó a un programa, el nivel de error está en% ERRORLEVEL%, mientras que desde los archivos por lotes el nivel de error se devuelve en la variable ErrorLevel y no necesita% 's a su alrededor.
Ante una preocupación similar, encontré la siguiente herramienta con una búsqueda trivial en Google:
JPSoft " Tomar el mando " incluye un archivo por lotes IDE / depurador. Su breve video de presentación lo demuestra muy bien.
Estoy usando la versión de prueba desde hace unas horas. Aquí está mi primera opinión humilde:
- Por un lado, de hecho permite la depuración de scripts .bat y .cmd y ahora estoy convencido de que puede ayudar en algunos casos
- Por otro lado, a veces se bloquea y tuve que matarlo ... especialmente al depurar subíndices (no siempre de forma sistemática) ... no muestra una "pila de llamadas". ni un " salir " botón.
Deverved a try.
Encontré el software 'running steps' (win32) haciendo exactamente lo que estaba buscando: http://www.steppingsoftware.com/
Puede cargar un archivo bat, colocar puntos de interrupción / comenzar a recorrerlo mientras ve las variables de salida y entorno.
La versión de evaluación solo permite pasar por 50 líneas ... ¿Alguien tiene una alternativa gratuita con una funcionalidad similar?
rem el @ECHO OFF y llame a su archivo por lotes redirigiendo TODOS los resultados a un archivo de registro ...
c: > yourbatch.bat (parámetros opcionales) > yourlogfile.txt 2>&1
encontrado en http://www.robvanderwoude.com/battech_debugging.php
¡FUNCIONA! no olvides el 2 > & amp; 1 ...
WIZ
La única forma en la que puedo pensar es rociar el código con echo
s y pause
s.
¿Intentó redirigir el resultado a un archivo? Al igual que whatever.bat > log.txt
Debe asegurarse de que, en este caso, todos los demás scripts llamados también se estén registrando en el archivo como > > log.txt
Además, si coloca una fecha / T y una hora / T al principio y al final de ese archivo por lotes, obtendrá las horas en que estaba en ese punto y puede asignar el tiempo de ejecución del script y el orden.
O ... Llame a su archivo .bat principal desde otro archivo .bat y envíe el resultado a un archivo de resultados, es decir,
runner.bat > mainresults.txt
Donde runner.bat llama al archivo principal .bat
Debería ver todas las acciones realizadas en el archivo .bat principal ahora
o, abra una ventana de cmd, luego llame al lote desde allí, la salida estará en la pantalla.