A collection of some useful snippets for batch files.
Controlling batch file output
To stop every line of the batch file being output to the command prompt put this at the top of the batch file, this makes for a less noisy output.
Echo the output of a command, useful for logging what the batch file is actually doing.
for /f %%i in ('dir') do echo %%i
Working with variables
Store the output of a command as a variable to be used elsewhere in the batch file. Normally
for /f on its own would loop the output word by word using whitespace as a delimiter, by adding
tokens=* we make it loop the output line by line. Note as we're looping line by line the variable will be set to the value of the last line
for /f "tokens=*" %%i in ('cd') do set current_directory=%%i echo %current_directory%
However there is a better way to query the current working directory than the previous example, use the built in variable
Invoking other batch files
To invoke a second batch file from inside a batch file without ending the execution when the second batch file is finished.
One problem with calling other batch files is that we may not be in the directory we think we are in, the batch file may have been invoked from a different directory to the one it is located in. To work around this we can wrap calls to other relative batch files with a push and pop of the current batch files directory.
pushd %~dp0 call other.bat popd
Or just append the current batch files directory to the relative batch file's name.
Another use of
call is to combine it with
goto and mimic the behaviour of functions within batch files.
goto post_functions :hello_world echo hello world! exit /b 0 :post_functions call :hello_world
To stop the command window from closing immediately when done only after double clicking a batch file.
@echo %cmdcmdline% | findstr /l "\"\"" >NUL 2>&1 if %errorlevel% EQU 0 pause
This checks if the command line used to invoke the batch file was a call to explorer,
%cmdcmdline% would look something like
C:\Windows\system32\cmd.exe /c ""D:\example.bat" ". This code above looks for the double quotes just before the file path.