web-dev-qa-db-fra.com

Comment puis-je déboguer un script .BAT?

Existe-t-il un moyen de parcourir un script .bat? Le problème, c’est que j’ai un script de construction, qui appelle beaucoup d’autres scripts, et j'aimerais voir quel est l’ordre dans lequel ils sont appelés, afin que je puisse savoir exactement où je dois aller et ajouter mes modifications. .

90
Vhaerun

De toute façon, je ne sais pas comment faire pour exécuter un fichier .bat, mais vous pouvez utiliser echo et pause pour aider au débogage.

[~ # ~] echo [~ # ~]
Répondra à un message dans le fichier de commandes. Tels que ECHO, Hello World imprimera Hello World à l’écran lorsqu’il sera exécuté. Cependant, sans @ECHO OFF au début du fichier batch, vous obtiendrez également "ECHO Hello World" et "Hello World". Enfin, si vous souhaitez simplement créer une ligne vide, tapez ECHO. l'ajout du point à la fin crée une ligne vide.

[~ # ~] pause [~ # ~]
Invite l’utilisateur à appuyer sur n’importe quelle touche pour continuer.

Source: Aide de fichier batch

@ workmad3: answer a d'autres bons conseils pour travailler avec la commande echo.

Une autre ressource utile ... DDB: Conseils sur les fichiers de commandes DOS

67
Eric Schoonover

Assurez-vous qu'il n'y a pas d'instructions "echo off" dans les scripts et appelez "echo on" après avoir appelé chaque script pour réinitialiser celles que vous avez manquées.

La raison en est que si echo est laissé activé, l'interpréteur de commande affichera chaque commande (après le traitement des paramètres) avant de l'exécuter. Cela semble vraiment mauvais pour une utilisation en production, mais très utile pour le débogage car vous pouvez voir où la sortie a mal tourné.

Assurez-vous également que vous vérifiez les niveaux d'erreur définis par les scripts et les programmes de traitement par lots appelés. Rappelez-vous qu’il existe 2 méthodes différentes utilisées dans les fichiers .bat pour cela. Si vous avez appelé un programme, le niveau d'erreur est dans% ERRORLEVEL%, tandis que dans les fichiers de commandes, le niveau d'erreur est renvoyé dans la variable ErrorLevel et n'a pas besoin de%.

17
workmad3

Face à des préoccupations similaires, j'ai trouvé l'outil suivant avec une recherche Google triviale:

" Take Command " de JPSoft inclut un fichier de traitement par lots IDE/débogueur. Leur courte vidéo de présentation le montre bien.

J'utilise la version d'essai depuis quelques heures. Voici mon premier humble avis:

  • D'un côté, cela permet en effet de déboguer les scripts .bat et .cmd et je suis maintenant convaincu que cela peut aider dans de nombreux cas.
  • D'autre part, il bloque parfois et je dois le tuer ... spécialement lors du débogage des indices (pas toujours systématiquement) .. il ne montre pas de "pile d'appels" ni de bouton "quitter".

Cela passe par un essai.

12
Myobis

J'ai trouvé le logiciel 'winches' exécutant exactement ce que je cherchais: http://www.steppingsoftware.com/

Vous pouvez charger un fichier bat, placer des points d'arrêt/commencer à le parcourir tout en consultant les variables de sortie et d'environnement.

La version d'évaluation ne permet de parcourir que 50 lignes ... Quelqu'un a-t-il une alternative gratuite dotée de fonctionnalités similaires?

8
Jokkke99BE

rem outez le @ECHO OFF et appelez votre fichier de commandes redirecter TOUT la sortie dans un fichier journal.

c:> yourbatch.bat (paramètres facultatifs)> yourlogfile.txt 2> & 1

trouvé à http://www.robvanderwoude.com/battech_debugging.php

ÇA MARCHE!! n'oubliez pas les 2> et 1 ...

AS

6
WIZ

La seule façon dont je puisse penser est de scintiller le code avec echos et pauses.

2
jop

Avez-vous essayé de rediriger le résultat vers un fichier? Comme quoi que ce soit.bat> log.txt

Vous devez vous assurer que, dans ce cas, chaque autre script appelé se connecte également au fichier tel que >> log.txt

De plus, si vous mettez une date/T et une heure/T au début et à la fin de ce fichier de commandes, vous obtiendrez l'heure à laquelle il se trouvait à ce moment-là et vous pouvez mapper l'heure et la commande de votre script.

2
Biri

Ou .... Appelez votre fichier .bat principal à partir d'un autre fichier .bat et exportez le résultat dans un fichier de résultat, par exemple.

runner.bat> mainresults.txt

Où runner.bat appelle le fichier principal .bat

Vous devriez voir maintenant toutes les actions effectuées dans le fichier principal .bat

1
Mark Thomas