Script batch - Debug

Molto spesso è possibile incorrere in problemi durante l'esecuzione di file batch e il più delle volte è necessario eseguire il debug dei file batch in un modo o nell'altro per determinare il problema con il file batch stesso. Di seguito sono riportate alcune delle tecniche che possono aiutare nel debug dei file di script batch.

Messaggio di errore

Per scoprire l'origine del messaggio, segui questi passaggi:

Step 1 - REM esce dalla linea @ECHO OFF, cioè REM @ECHO OFF o :: @ECHO OFF.

Step 2 - Eseguire il file batch con i parametri della riga di comando richiesti, reindirizzando tutto l'output a un file di registro per un successivo confronto.

test.bat > batch.log 2>&1

Step 3 - Cerca nel file batch.log i messaggi di errore

Step 4- Controllare la riga precedente per eventuali comandi, parametri o valori imprevisti o non validi; prestare particolare attenzione ai valori di tutte le variabili di ambiente utilizzate nel comando.

Step 5 - Correggere l'errore e ripetere questo processo finché tutti i messaggi di errore non sono scomparsi.

Linee di comando complesse

Un'altra fonte comune di errori sono i comandi reindirizzati in modo errato, come ad esempio i comandi FIND o FINDSTR "annidati" con stringhe di ricerca errate, a volte all'interno di un ciclo FOR / F.

Per verificare la validità di questi comandi complessi, segui questi passaggi:

Step 1 - Inserire "righe di controllo comandi" appena prima di una riga che utilizza il complesso insieme di comandi.

Di seguito è riportato un esempio in cui il comando ECHO viene inserito per contrassegnare il punto in cui termina l'output del primo comando TYPE e inizia quello successivo.

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

Step 2 - Seguire la procedura per trovare le origini dei messaggi di errore sopra descritte.

Step 3- Prestare particolare attenzione all'output delle righe di comando "semplificate": l'output è nel formato previsto? Il valore o la posizione del "token" è come previsto?

Sottoprogrammi

Le subroutine che generano messaggi di errore rappresentano una "sfida" aggiuntiva nel trovare la causa dell'errore, poiché possono essere richiamate più volte nello stesso file batch.

Per scoprire cosa causa la chiamata errata alla subroutine, segui questi passaggi:

Step 1 - Aggiungi e reimposta una variabile contatore all'inizio dello script -

SET Counter = 0

Step 2 - Incrementa il contatore ogni volta che viene chiamata la subroutine, inserendo la riga seguente all'inizio della subroutine

SET /A Counter+=1

Step 3- Inserire un'altra riga subito dopo l'incremento del contatore, contenente solo il comando SET; questo elencherà tutte le variabili d'ambiente e i loro valori.

Step 4 - Seguire la procedura per trovare le origini dei messaggi di errore sopra descritte.

Versioni di Windows

Se intendi distribuire i tuoi file batch ad altri computer che possono o meno eseguire la stessa versione di Windows, dovrai testare i tuoi file batch in quante più versioni di Windows possibile.

Il seguente esempio mostra come controllare le varie versioni del sistema operativo per controllare le versioni di Windows rilevanti.

@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