Script par lots - Débogage

Très souvent, vous pouvez rencontrer des problèmes lors de l'exécution de fichiers de commandes et le plus souvent, vous devrez déboguer vos fichiers de commandes d'une manière ou d'une autre pour déterminer le problème avec le fichier de commandes lui-même. Voici quelques-unes des techniques qui peuvent aider au débogage des fichiers de script par lots.

Messages d'erreur

Pour découvrir la source du message, procédez comme suit -

Step 1 - REM sur la ligne @ECHO OFF, c'est-à-dire REM @ECHO OFF ou :: @ECHO OFF.

Step 2 - Exécutez le fichier de commandes avec les paramètres de ligne de commande requis, en redirigeant toutes les sorties vers un fichier journal pour une comparaison ultérieure.

test.bat > batch.log 2>&1

Step 3 - Recherchez dans le fichier batch.log les messages d'erreur

Step 4- Vérifiez la ligne précédente pour toute commande inattendue ou invalide, commutateur (s) de ligne de commande ou valeur (s); portez une attention particulière aux valeurs de toutes les variables d'environnement utilisées dans la commande.

Step 5 - Corrigez l'erreur et répétez ce processus jusqu'à ce que tous les messages d'erreur aient disparu.

Lignes de commande complexes

Les commandes incorrectement redirigées, comme par exemple les commandes "imbriquées" FIND ou FINDSTR avec des chaînes de recherche incorrectes, parfois dans une boucle FOR / F, sont une autre source fréquente d'erreurs.

Pour vérifier la validité de ces commandes complexes, procédez comme suit:

Step 1 - Insérez des "lignes de contrôle de commande" juste avant une ligne qui utilise le jeu de commandes complexe.

Voici un exemple dans lequel la commande ECHO est insérée pour marquer où la sortie de la première commande TYPE se termine et la suivante commence.

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

Step 2 - Suivez la procédure pour trouver les sources des messages d'erreur décrites ci-dessus.

Step 3- Faites particulièrement attention à la sortie des lignes de commande "simplifiées": La sortie est-elle au format attendu? La valeur ou la position du «jeton» est-elle conforme aux attentes?

Sous-programmes

Les sous-programmes générant des messages d'erreur posent un «défi» supplémentaire pour trouver la cause de l'erreur, car ils peuvent être appelés plusieurs fois dans le même fichier de commandes.

Pour vous aider à découvrir les causes de l'appel incorrect au sous-programme, procédez comme suit:

Step 1 - Ajouter et réinitialiser une variable de compteur au début du script -

SET Counter = 0

Step 2 - Incrémenter le compteur à chaque appel du sous-programme, en insérant la ligne suivante au début du sous-programme

SET /A Counter+=1

Step 3- Insérez une autre ligne juste après l'incrément du compteur, contenant uniquement la commande SET; cela listera toutes les variables d'environnement et leurs valeurs.

Step 4 - Suivez la procédure pour trouver les sources des messages d'erreur décrites ci-dessus.

Versions de Windows

Si vous envisagez de distribuer vos fichiers de commandes sur d'autres ordinateurs exécutant ou non la même version de Windows, vous devrez tester vos fichiers de commandes dans autant de versions de Windows que possible.

L'exemple suivant montre comment rechercher différentes versions du système d'exploitation pour vérifier les versions Windows pertinentes.

@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