How can I debug a .BAT script?

WindowsBatch FileDebuggingCmdDos

Windows Problem Overview


Is there a way to step through a .bat script? The thing is, I have a build script , which calls a lot of other scripts, and I would like to see what is the order in which they are called, so that I may know where exactly I have to go about and add my modifications.

Windows Solutions


Solution 1 - Windows

I don't know of anyway to step through the execution of a .bat file but you can use echo and pause to help with debugging.

>ECHO
Will echo a message in the batch file. Such as ECHO Hello World will print Hello World on the screen when executed. However, without @ECHO OFF at the beginning of the batch file you'll also get "ECHO Hello World" and "Hello World." Finally, if you'd just like to create a blank line, type ECHO. adding the period at the end creates an empty line.

>PAUSE
Prompt the user to press any key to continue.

Source: Batch File Help

@workmad3: answer has more good tips for working with the echo command.

Another helpful resource... DDB: DOS Batch File Tips

Solution 2 - Windows

Make sure there are no 'echo off' statements in the scripts and call 'echo on' after calling each script to reset any you have missed.

The reason is that if echo is left on, then the command interpreter will output each command (after parameter processing) before executing it. Makes it look really bad for using in production, but very useful for debugging purposes as you can see where output has gone wrong.

Also, make sure you are checking the ErrorLevels set by the called batch scripts and programs. Remember that there are 2 different methods used in .bat files for this. If you called a program, the Error level is in %ERRORLEVEL%, while from batch files the error level is returned in the ErrorLevel variable and doesn't need %'s around it.

Solution 3 - Windows

Facing similar concern, I found the following tool with a trivial Google search :

JPSoft's "Take Command" includes a batch file IDE/debugger. Their short presentation video demonstrates it nicely.

I'm using the trial version since a few hours. Here is my first humble opinion:

  • On one side, it indeed allows debugging .bat and .cmd scripts and I'm now convinced it can help in quite some cases
  • On the other hand, it sometimes blocks and I had to kill it... specially when debugging subscripts (not always systematically).. it doesn't show a "call stack" nor a "step out" button.

It deverves a try.

Solution 4 - Windows

I found 'running steps' (win32) software doing exactly what I was looking for: http://www.steppingsoftware.com/

You can load a bat file, place breakpoints / start stepping through it while seeing the output and environment variables.

The evaluation version only allows to step through 50 lines... Does anyone have a free alternative with similar functionality?

Solution 5 - Windows

rem out the @ECHO OFF and call your batch file redirectin ALL output to a log file..

c:> yourbatch.bat (optional parameters) > yourlogfile.txt 2>&1

found at http://www.robvanderwoude.com/battech_debugging.php

IT WORKS!! don't forget the 2>&1...

WIZ

Solution 6 - Windows

The only way I can think of is spinkle the code with echos and pauses.

Solution 7 - Windows

Did you try to reroute the result to a file? Like whatever.bat >log.txt

You have to make sure that in this case every other called script is also logging to the file like >>log.txt

Also if you put a date /T and time /T in the beginning and in the end of that batch file, you will get the times it was at that point and you can map your script running time and order.

Solution 8 - Windows

A quite frequent issue is that a batch script is run by double-clicking its icon. Since the hosting Command Prompt (cmd.exe) instance also terminates as soon as the batch script is finished, it is not possible to read potential output and error messages.

To read such messages, it is very important that you explicitly open a Command Prompt window, manoeuvre to the applicable working directory and run the batch script by typing its path/name.

Solution 9 - Windows

you can use cmd \k at the end of your script to see the error. it won't close your command prompt after the execution is done

Solution 10 - Windows

Or.... Call your main .bat file from another .bat file and output the result to a result file i.e.

runner.bat > mainresults.txt

Where runner.bat calls the main .bat file

You should see all the actions performed in the main .bat file now

Solution 11 - Windows

or, open a cmd window, then call the batch from there, the output will be on the screen.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVhaerunView Question on Stackoverflow
Solution 1 - WindowsEric SchoonoverView Answer on Stackoverflow
Solution 2 - Windowsworkmad3View Answer on Stackoverflow
Solution 3 - WindowsMyobisView Answer on Stackoverflow
Solution 4 - WindowsJokkke99BEView Answer on Stackoverflow
Solution 5 - WindowsWIZView Answer on Stackoverflow
Solution 6 - WindowsjopView Answer on Stackoverflow
Solution 7 - WindowsBiriView Answer on Stackoverflow
Solution 8 - WindowsaschipflView Answer on Stackoverflow
Solution 9 - WindowsArpan SainiView Answer on Stackoverflow
Solution 10 - WindowsMark ThomasView Answer on Stackoverflow
Solution 11 - WindowsPwnView Answer on Stackoverflow