Batch files are text files containing a sequence of commands that the Windows command interpreter executes sequentially. These files, typically with .bat or .cmd extensions, automate repetitive tasks and streamline system administration. You can terminate any running batch script by presing Ctrl+C.
Here's a simple introductory example:
@echo off
echo "Welcome to Batch Programming!"
pause
Saving this as sample.bat and executing it will display:
Welcome to Batch Programming!
Press any key to continue. . .
Essential Batch Commands
Comments: REM and ::
The REM command creates comments that are ignored during execution but displayed when echo is on. The :: syntax provides a more efficient alternative. Lines beginning with a colon are treated as labels, but when the colon is followed by a non-alphanumeric character, it functions as a comment.
Output Control: ECHO and @
The @ symbol suppresses command echoing for the specific line it precedes. The ECHO command controls output display:
ECHO ON|OFF- Toggle command displayECHO- Show current echo statusECHO message- Display custom textECHO.- Output blank line (period must directly follow ECHO)ECHO response|command- Auto-answer prompts
Execution Control: PAUSE
Halts script execution and waits for user input. Combine with custom messages:
ECHO Custom message here
PAUSE > nul
Error Level Checking
Every command returns an exit code accessible via %errorlevel%:
ECHO %errorlevel%
Zero typically indicates success, while non-zero values signal errors.
Window Customization
TITLE new_title sets the console window title.
COLOR [attr] changes text and background colors using hexadecimal values (0-F).
Directory Navigation: PUSHD and POPD
These commands manage directory stack for easy navigation:
@echo off
C:
CD \ & MD data_folder
D:
MD backup_folder
CD /D backup_folder
PUSHD C:\data_folder
REM Working in C:\data_folder
POPD
REM Back to D:\backup_folder
Conditional Branching: GOTO
Create labeled sections and jump between them:
@echo off
:loop_start
SET /A counter+=1
ECHO Iteration %counter%
IF %counter% LEQ 5 GOTO loop_start
PAUSE
Text Searching: FIND
Search for strings within files:
FIND [/V] [/C] [/N] [/I] "pattern" filename
Common options: /V (non-matching lines), /C (count only), /N (line numbers), /I (case-insensitive)
File Associations: ASSOC and FTYPE
Manage file extension associations:
ASSOC .ext=filetype
FTYPE filetype="program_path" %1 %*
Subroutine Calling: CALL
Execute other batch files or internal subroutines:
CALL :subroutine_name argument1 argument2
GOTO :eof
:subroutine_name
ECHO %1
ECHO %2
GOTO :eof
Special Characters and Operators
Command Suppression: @
Prveents command echoing for the current line.
Variable References: %
Enclose varible names: %varname%. Script parameters: %0 to %9, %* for all.
Redirection Operators: > and >>
> overwrites output, >> appends:
ECHO content > newfile.txt
ECHO more >> existing.txt
Input Redirection: <
Redirect input from file instead of keyboard:
DATE < datefile.txt
Pipe Operator: |
Pass command output as input to another command:
DIR C:\ | FIND "txt"
Escape Character: ^
Escapes special characters or provides line continuation:
ECHO This line ^
continues on next
Command Combinations: &, &&, ||
&- Execute sequentially regardless of success&&- Execute next only if previous succeeds||- Execute next only if previous fails
String Delimiters: " "
Handle paths with spaces or special characters.
Block Grouping: ( )
Group multiple commands as single unit:
(
ECHO First line
ECHO Second line
)
The FOR Command: Looping and Iteration
Basic Syntax
FOR %%var IN (set) DO command
Directory Iteration: /D
Process directories instead of files:
FOR /D %%d IN (C:\*) DO ECHO Directory: %%d
Recursive File Search: /R
Search directory trees:
FOR /R C:\ %%f IN (*.log) DO ECHO Found: %%f
Numeric Loops: /L
Generate number sequences:
FOR /L %%n IN (1,1,10) DO ECHO Number: %%n
File Parsing: /F
Process file content, strings, or command output:
FOR /F "tokens=1,3 delims=," %%a IN (data.csv) DO (
ECHO First: %%a
ECHO Third: %%b
)
Variable Management
System Variables
Predefined variables like %USERNAME%, %WINDIR%, %PATH%, %DATE%, %TIME%.
Custom Variables
Set with SET command:
SET myVar=value
ECHO %myVar%
SET /P userInput=Enter value:
ECHO You entered: %userInput%
The SET Command: Advanced Operations
Arithmetic Operations
SET /A result=5+3*2
SET /A counter+=1
String Manipulation
Replacement:
SET newstring=%oldstring:find=replace%
Substring extraction:
SET substring=%string:~start,length%
Conditional Logic: IF Command
Error Level Checking
IF ERRORLEVEL 1 ECHO Command failed
String Comparison
IF "%var1%"=="%var2%" ECHO Variables match
File Existence
IF EXIST filename.txt ECHO File exists
Enhanced Comparisons
Case-insensitive:
IF /I "A"=="a" ECHO Match (case ignored)
Numeric comparisons:
IF %num% GTR 10 ECHO Number is greater than 10
Advanced Programming Techniques
Interactive Menu Systems
@echo off
:menu
CLS
ECHO 1. Option A
ECHO 2. Option B
ECHO 3. Exit
SET /P choice=Select option:
IF "%choice%"=="1" GOTO optionA
IF "%choice%"=="2" GOTO optionB
IF "%choice%"=="3" GOTO end
ECHO Invalid choice
GOTO menu
Subroutine Implementation
CALL :calculate 10 20 result
ECHO Sum: %result%
GOTO :eof
:calculate
SET /A %3=%1+%2
GOTO :eof
Time Delay Methods
Using PING:
PING -n 3 127.0.0.1 > nul
Using timeout loops:
FOR /L %%i IN (1,1,1000) DO ECHO. > nul
Progress Bar Simulation
ECHO Processing files:
SET progress=■
FOR /L %%i IN (1,1,20) DO (
SET /P=%progress%< nul
PING -n 1 127.0.0.1 > nul
)
ECHO 100%%
Random Number Generation
SET /A randomNum=%RANDOM% %% 100
ECHO Random number (0-99): %randomNum%
Conclusion
Windows batch scripting provides powerful automation capabilities through these fundamental commands and techniques. Mastery of these concepts enables creation of sophisticated automation solutions for Windows environments.