Come posso eseguire il debug di uno script .BAT?


96

C'è un modo per eseguire uno script .bat? Il fatto è che ho uno script di compilazione, che richiama molti altri script, e vorrei vedere qual è l'ordine in cui vengono chiamati, in modo da poter sapere esattamente dove devo andare e aggiungere le mie modifiche .


4dos ha una build nel debugger.

Risposte:


69

Non so comunque come passare attraverso l'esecuzione di un file .bat ma puoi usare echoe pauseper aiutare con il debug.

ECHO
Riporterà un messaggio nel file batch. Come ECHO Hello World stamperà Hello World sullo schermo una volta eseguito. Tuttavia, senza @ECHO OFF all'inizio del file batch otterrai anche "ECHO Hello World" e "Hello World". Infine, se desideri creare una riga vuota, digita ECHO. l'aggiunta del punto alla fine crea una riga vuota.

PAUSA
Chiede all'utente di premere un tasto qualsiasi per continuare.

Fonte: Guida file batch

@ workmad3: answer ha altri buoni suggerimenti per lavorare con il echocomando.

Un'altra risorsa utile ... DDB: Suggerimenti sui file batch DOS


1
Immagino che queste siano le mie uniche opzioni.
Vhaerun

18

Assicurati che non ci siano istruzioni "echo off" negli script e chiama "echo on" dopo aver chiamato ogni script per ripristinare quelli che hai perso.

Il motivo è che se echo viene lasciato attivo, l'interprete dei comandi emetterà ogni comando (dopo l'elaborazione dei parametri) prima di eseguirlo. Lo fa sembrare davvero pessimo per l'uso in produzione, ma molto utile per scopi di debug, poiché puoi vedere dove l'output è andato storto.

Inoltre, assicurati di controllare gli ErrorLevels impostati dagli script e dai programmi batch chiamati. Ricorda che ci sono 2 diversi metodi usati nei file .bat per questo. Se hai chiamato un programma, il livello di errore è in% ERRORLEVEL%, mentre dai file batch il livello di errore viene restituito nella variabile ErrorLevel e non ha bisogno di% intorno ad esso.


13

Di fronte a una preoccupazione simile, ho trovato il seguente strumento con una banale ricerca su Google:

" Take Command " di JPSoft include un IDE / debugger di file batch. Il loro breve video di presentazione lo dimostra bene.

Sto usando la versione di prova da poche ore. Ecco la mia prima modesta opinione:

  • Da un lato, consente effettivamente il debug di script .bat e .cmd e ora sono convinto che possa aiutare in alcuni casi
  • D'altra parte, a volte si blocca e ho dovuto ucciderlo ... specialmente durante il debug degli indici (non sempre sistematicamente) .. non mostra uno "stack di chiamate" né un pulsante "esci".

Deve una prova.


1
Questo dovrebbe probabilmente essere un commento
KyleMit

8
@KyleMit puoi spiegare perché? in quanto si tratta di una soluzione autonoma distinta dalle altre e che risponde alla domanda originale? non è perché sia ​​abbastanza breve da rientrare in un commento, che deve ...
Myobis

1
In realtà intendevo probabilmente , in quanto potrebbe andare in entrambi i modi. Ma è una specie di risposta lmgtfy . Dal centro di risposta di aiuto sezione: Always quote the most relevant part of an important link. Senza il collegamento, questa risposta si dissolve, il che, di nuovo, probabilmente va bene, ma in genere questo tipo di suggerimento ad-hoc di un software proprietario non testato si adatterebbe generalmente meglio in un commento. Sentiti libero di lasciarlo anche tu.
KyleMit

8

Ho trovato il software "running steps" (win32) che faceva esattamente quello che stavo cercando: http://www.steppingsoftware.com/

È possibile caricare un file bat, posizionare punti di interruzione / iniziare a esaminarlo mentre si visualizzano l'output e le variabili di ambiente.

La versione di valutazione consente solo di scorrere 50 righe ... Qualcuno ha un'alternativa gratuita con funzionalità simili?


7
Hanno perso quel dominio e presumibilmente hanno cessato l'attività. È ancora possibile scaricare il software di valutazione da web.archive.org/web/20120421211043/http://… ma non è più possibile acquistare una licenza.
twasbrillig

6

esci da @ECHO OFF e chiama il tuo file batch reindirizzando TUTTO l'output in un file di registro ..

c:> yourbatch.bat (parametri opzionali)> yourlogfile.txt 2> & 1

trovato su http://www.robvanderwoude.com/battech_debugging.php

FUNZIONA!! non dimenticare il 2> e 1 ...

WIZ


2

L'unico modo che posso pensare è spinkle il codice con echos e pauses.


2

Hai provato a reindirizzare il risultato a un file? Come qualunque.bat> log.txt

Devi assicurarti che in questo caso anche ogni altro script chiamato acceda al file come >> log.txt

Inoltre, se metti una data / T e un'ora / T all'inizio e alla fine di quel file batch, otterrai i tempi in cui si trovava a quel punto e potrai mappare il tempo di esecuzione e l'ordine dello script.


Scrivere il risultato in un file non aiuta più di tanto, ci sono molti script che vengono chiamati e inoltre, ci sono molti eseguibili che vengono eseguiti.
Vhaerun

1
Se tutti gli altri script e programmi scrivono nello stdin, anche tutti i loro messaggi vengono registrati. Se esegui semplicemente il batch e vedi molti messaggi in esecuzione, puoi reindirizzarli a un file di registro.
Biri

1

Oppure ... Chiama il tuo file .bat principale da un altro file .bat e visualizza il risultato in un file dei risultati, ad es

runner.bat> mainresults.txt

Dove runner.bat chiama il file .bat principale

Ora dovresti vedere tutte le azioni eseguite nel file .bat principale


0

Un problema abbastanza frequente è che uno script batch viene eseguito facendo doppio clic sulla sua icona. Poiché il prompt dei comandi di hosting (cmd.exe istanza del termina in quel momento, non è possibile leggere potenziali messaggi di output e di errore.

Per leggere tali messaggi, è molto importante aprire in modo esplicito una finestra del prompt dei comandi, passare alla directory di lavoro applicabile ed eseguire lo script batch digitandone il percorso / nome.


0

puoi usare cmd \kalla fine del tuo script per vedere l'errore. non chiuderà il prompt dei comandi al termine dell'esecuzione


-3

oppure, apri una finestra cmd, quindi chiama il batch da lì, l'output sarà sullo schermo.


2
Questo fa così tante ipotesi sbagliate da non essere nemmeno una risposta. probabilmente i due più grandi sono che a) si presume che il file batch produca l'output della console. Non è necessario e b) che il file batch
funzioni
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.