How To Write A Simple Batch (.bat) File

Ads by Google

how to write a batch fileBatch files are the computer handyman’s way of getting things done. They can automate everyday tasks, shorten the required time to do something, and translate a complex process into something anyone could operate.

Since automation programs like AutoHotKey exist, many people have never written or taken the time to understand bat files, and many don’t even know what they do.

In this article, I’m going to show you how to write a simple batch file and present some basics that a user will need to understand when writing one. I’ll also provide you with a few resources for learning to write batch (.bat) files in case you’d like to go further.


Let’s say that you frequently have network issues; you’re constantly getting on the command prompt and typing in things like “ipconfig” and pinging Google to see what the problem is. After a while you realize that it would be a bit more efficient if you just wrote a simple BAT file, stuck it on your USB stick, and used it on the machines you troubleshoot.

Step 1: Create A BAT File

Create a new text document on your desktop. Double click the file – it should be blank inside. Now, go to file>save as, and in the “Save As” window, input a name for your BAT file and then add a “.bat” on the end (without the quotes). My file was named testBAT.bat, for instance.

Ads by Google

Before hitting save we need make sure that Windows doesn’t stick the standard “.txt” ending on the end of our new file. To do this, change the filetype from “.txt” to “all files” as shown in the screenshot below. That’s it – hit save and close the file.

how to write a batch file

Step 2: Learn Some Quick Code

If you know how to run commands in the command prompt, you’ll be a wiz at creating BAT files because it’s the same language. All you’re doing is telling the command prompt what you want to put in through a file, rather than typing it every time you run the command prompt. This saves you time and effort; but it also allows you to put in some logic (like simple loops, conditional statements, etc. that procedural programming is capable of conceptually).

There are SEVEN simple commands I want to familiarize you with for this program. Commands are NOT case sensitive, so don’t worry about that.

TITLE - The Window name for the BAT file.

ECHO - the “print” statement for BAT files. Anything following the word ECHO will be displayed in the command prompt as text, on its own line.

ECHO OFF – BAT writers typically put this at the beginning of their files. It means that the program won’t show the command that you told it to run while it’s running – it’ll just run the command. I’d recommend that after you run this test program, you try removing this line from your code to see what happens.

PAUSE - This outputs the “press any key to continue…” message that you’ve seen all too many times. It’s helpful because it pauses the BAT file execution until the user tells it to go again. If you don’t put this in your program, everything will speed by and end before you can see it. People typically put this in BAT files to give the user a chance to review the material on the screen before continuing.

CLS - Clears the DOS window (helpful if things get too cluttered!).

IPCONFIG – Outputs a lot of network information into your DOS box (network admins have dreams solely based off this command).

PING - Pings an IP, letting you know if your computer was able to contact it. This command also returns the latency (ping time) and by default pings three times.

Step 3: Do Some Quick Logic

We need to plan our program out. Any good programmer will think about the general framework of their program before they dash into things – it prevents them from making logic mistakes that are hard to back out of.

For this program, we want to check the computer’s network/internet settings with an “ipconfig /all” command, and then review that information by giving the user time to read everything. Afterwards, we want to ping google.com to figure out if we really truly have access to the internet. We’ll pause the program after this as well, because we want to know for sure that they saw it.¬† OK. Very simple program, very simple logic. Let’s write some code.

Step 4: Write Your BAT File

Right click your BAT file and click “edit” to bring up Notepad. The whole document should be blank – ready for some epic programmer input.

Rather than walking you line by line through the code (it’s extremely short) I’m going to use a code comment (example– ¬† CODE¬† ::Comment) to let you know what we just did.I’m putting the actual code in bold to make things a bit easier to process.

———–Start Code———–

ECHO OFF
::CMD will no longer show us what command it’s executing(cleaner)
ECHO As a network admin, I’m getting tired of having to type these commands in! Hopefully, this saves me some time in the long run.
:: Print some text
IPCONFIG /ALL
:: Outputs tons of network information into the command prompt
PAUSE
:: Lets the user read the important network information
PING www.google.com
:: Ping google to figure out if we’ve got internet!
ECHO All done pinging Google.
::Print some text
PAUSE
:: Give the user some time to see the results. Because this is our last line, the program will exit and the command window will close once this line finishes.

———–End Code———–

Step 5: Run Your BAT File

Save the file you just coded (or copy/paste mine in, it will run as written), and double click it. Your output should be something like the screenshot below.

how to write a batch file

Congratulations! You’ve written a batch file successfully.

If you want to learn more about bat files, I’d recommend you check out the commands available to the language. From there, your best bet is to write your own, or follow more examples online. Feel free to comment here if you have a BAT-related question.

The most useful BAT I’ve made so far is one that allowed me to compile and run Java programs with a single command, saving me countless amounts of command typing in the long run (because I compile/run so often when programming). I’ve also made one that sets file associations up the way I want them when I plug in my flash drive to a PC – this makes it possible for my portable apps to be the default app right from the get-go with a new computer.

Have you written anything cool with BAT files before?

Ads by Google
From the Web

33 Comments - Write a Comment

Reply

Chris

Batch files are still kind of fun really just to get them to do some simple things. These are still handy for starting up some simple tasks with a minimal amount of code necessary to get the tasks done.

Reply

Mayank

I Just Loved To Read This Post.
Really I Love Such Type Of Programming.
I Really Love Programming But Sadly Donno As Now I M Only Of 14 Years And In School.
So Don Have Time To Do These.

Paul Bozzay

Glad you enjoyed it! Thanks for the feedback :-)

Johnny Hamrick

I had started to do some batch files at 14. I learned from a friend and it was fun. I just made a few joke batch files and then my friend put a file on my computer that turned my capslock on and off repeatedly.

Reply

Ivan Kolevski

I think that batch files will be around for a while. I use batch files on a daily basis and it is very time efficient method of getting things done with minimal input.
Here is my daily batch:
============================================================
ECHO OFF
ECHO This is CCleaner silent run with DNS flush. I use this after I log in to my bank and close Firefox.
“C:\Program Files\CCleaner\CCleaner.exe” /AUTO
ipconfig /flushdns
ECHO Privacy is important !!! All good now.
PAUSE
============================================================

Hope this helps.
Regards,
Ivan K.

Reply

Andrei

Is there a batch command that would allow snapping a window to the right/left half of the screen in Windows 7?

I am trying to make a .bat file that opens 2 Windows Explorer windows, each on its half screen.

Paul Bozzay

I don’t know of one–I googled it and came up empty. I’ll look around a bit more though. If you get something let me know–I’d like to know this too.

Alex

Windows 7 has gestures, you can drag windows to ceertain parts of the screen side and it will snap them into position. Google for more information on it.

Reply

rchard2scout

Can a batch file open several programs that have to keep running (e.g. I want a batch file that opens Chrome, Itunes, etc. but when I tried it, it stopped after chrome, and only continues when I closed chrome.)
Any solutions?

Paul Bozzay

Sure can.

Try code like this… (replace paths/names accordingly)

==========================
ECHO OFF
start /d “C:\Windows\System32\” calc.exe
ECHO CALC STARTED
start /d “C:\Program Files\Mozilla Firefox” firefox.exe
ECHO FIREFOX STARTED
start /d “C:\Users\user\AppData\Local\Google\Chrome\Application\” chrome.exe
ECHO CHROME STARTED
ECHO OPERATION COMPLETE
PAUSE
=====================

Tested it 30 seconds ago and everything ran flawlessly. Let me know if it works for you!

Reply

Ed

Nice beginners guide to batch scripting. VBscript and powershell are great tools and have their place but batch files are indispensable. I work in IT and am often surprised at how few of my colleagues actually utilize batch files for daily tasks. In the 10+ years I’ve been doing this I’ve written literally hundreds of batch files with at least 10 that I use daily. The best one I’ve ever written runs against my print servers and pulls out all the print job information (Username, doc type, doc name, pages printed etc) and puts that into a csv file. Very useful for tracking printer usage.

Paul Bozzay

Exactly! Thanks for taking the time to mention this; I think a lot of us feel the same way about batch files.

~Paul

Reply

Paul Bozzay

A lot of people (as you can see) still use batch files…For this reason they are not only relevant, but useful too. With just a few lines of very easy code, you can perform an automated operation on any Windows machine…To each his own, but I personally resort to using BAT files frequently.

~Paul

Reply

Ed

Here is a usefull site for scripting not just Batch Scripting but it does have a very comprehensive section on batch scripting and it is an invaluable resource for those who routinely write scripts.

http://www.robvanderwoude.com/

Reply

Ed

Here is a usefull site for scripting not just Batch Scripting but it does have a very comprehensive section on batch scripting and it is an invaluable resource for those who routinely write scripts.

http://www.robvanderwoude.com/

Reply

Josh

My job involves setting up new computers for workers at a large corporation. The guy in the job before me would network two computers and copy files manually from folder to folder. Could take hours and failed frequently, forcing you to restart because you had no idea where Windows left off. I wrote a batch script that maps a network drive to the old computer and copies everything that a user has created that is not in our standard image of windows. Now I sit back and watch it run.

Reply

Clive

Hi to all you guys who are keen on Batch Files.
Can batch files be created to run automatically i.e. triggered by an event? Would a batch file be an appropriate way of deleting an old file when an imaging software starts to create a new file. I have space on a partition to store say 3 files & would like to be able to automatically delete the oldest (by date) file before the next/newest (4th?) file is created.
Thanks,
Clive

Reply

Jiw

Can’t read what the description says to do because of all the ads on the right side of the screen site on top of the text, too bad. I’ll have to learn somewhere else.

Reply

Dustin

I do so much stuff with batch files. I created a batch file where I can type in a specific number, and it opens a program corresponding to the number. If I type in a number for a Google product, it opens it, and then opens a vbscript file that types on my username and password automatically. after a while typing in code and fixing bugs on a batch program turned fun. good luck to anyone trying it out :)

Reply

Allen

i have a problem, when i right click on my bat file and then click on edit, it opens like a txt file, not a black command file

Johnny Hamrick

It is supposed to

Dan

Because you create them with a text editor… That’s how they’re supposed to work.

Reply

Johnny Hamrick

Here is a fun batch file. Type:
Title VIRUS
Color 02
echo off
cls

echo VIRUS DETECTED
pause
cls
echo DO YOU WISH TO DELETE VIRUS? (Y/N)
pause
cls
echo DELETING ALL FILES
pause
cls
echo MICROSOFT PROGRAM DELETED
Pause
echo GOODBYE
pause
cls

Dan

Why even use a cls at the end? The user probably wouldn’t even notice it. Funny idea though.

Johnny Hamrick

Well another thing you could do is disguise it as their main internet icon so that whenever they click on it this will always pop up. I did that to a friend they couldn’t figure it out.

Dan

lol, I’ll have to try that sometime. Might want to go with a bright red instead of green, color b or color c I believe.

Johnny Hamrick

The reason I picked 02 was for a black background with a red font. It appears better than some other combinations that I have seen.

Nathan

Here is a tweek to your prank…..
Title VIRUS
Color 02
echo off
cls
echo VIRUS DETECTED
pause
cls
echo DO YOU WISH TO DELETE VIRUS? (Y/N)
pause
cls
echo DELETING ALL FILES
pause
cls
echo MICROSOFT PROGRAM DELETED
Pause
echo GOODBYE
shutdown -s -f -t 5 -c “GoodBye”

Nathan

Type color/? into cmd.exe to get the full combination of colors availible

Reply

ABDUL WAJID

Hey! can eny1 help me out to create a .bat file, which if i will put it in a folder with lots of data & open it it repeats the same folder where the bat file is, because my friend once did it with me during my school days but i forgot to ask him so eny1 plz hlp
& also if there is eny program that if i click the bat file the computer will go to sleep automatically, if some program like that is there plz inform me.

Reply

Nathan

Here is a bat file ive been coding in my free time….

title PC TOOLS (C) Marcus Meyer designed by NATHAN VAN NIEKERK Version 2.0
@echo off

color 0c
cls
echo (C) Marcus Meyer designed by NATHAN VAN NIEKERK
echo.
cls
goto start

rem ####################### START ######################
:start
echo (C) Marcus Meyer designed by NATHAN VAN NIEKERK
echo.
color 0a
echo %name% WELCOME TO PC TOOLS!!
echo What option would you like to execute?
echo.
echo NETWORKING:
echo _____________
echo 1) Ipconfig
echo 2) Ping an ip address
echo 3) Trace Root
echo 4) NetStat
echo 5) Get Mac address
echo.
echo SYSTEM INFO:
echo ______________
echo 6) Who am I
echo 7) PC INFO
echo 8) Performance Check
echo 9) Disk Check
echo 10) Driver Check
echo 11) Mirror Drive
echo 12) Recover Drive
echo.
echo WINDOWS TOOLS:
echo __________________
echo 13) Clear recycle bin and Temporary files
echo 14) Hard drive Defrag
echo 15) Start or End a Task
echo.

echo 16) Exit

echo.
set option=
echo.
set /p option=Select One:
echo.
if ‘%option%’==’1′ goto ipconfig
if ‘%option%’==’2′ goto ping
if ‘%option%’==’3′ goto tracert
if ‘%option%’==’4′ goto netstat
if ‘%option%’==’5′ goto getmac
if ‘%option%’==’6′ goto whoami
if ‘%option%’==’7′ goto pcinfo
if ‘%option%’==’8′ goto perfmon
if ‘%option%’==’9′ goto CHKDSK
if ‘%option%’==’10’ goto DRIVER
if ‘%option%’==’11’ goto MIR
if ‘%option%’==’12’ goto recover
if ‘%option%’==’13’ goto clearmgr
if ‘%option%’==’14’ goto defrag
if ‘%option%’==’15’ goto task
if ‘%option%’==’16’ goto exit
echo.
ECHO “%option%” is not valid please try again
goto start
ECHO.

rem ###################### Options #####################

rem ###################### ipconfig #######################
:ipconfig

color 0c
echo.
ipconfig
pause
cls
goto start

rem ###################### ping #######################
:ping
color 0b
echo If you dont know the ip adress of the target pc, you can find the other target IP Address, by using our program and option 1
pause
echo Please enter the IP adress you would like to ping?
echo.
Set /p ip=
ping %ip%
pause
cls
goto start

rem ###################### tracert #######################
:tracert
color 0b
echo Please enter web page you would like to trace?
echo.
Set /p trace=
echo.
echo Trace Root initiate
tracert %trace%
pause
cls
goto start

rem ###################### netstat #######################
:netstat
color 0f
echo.
netstat
pause
cls
goto start

rem ###################### getmac #######################
:getmac
@echo off
color 0e
echo.
getmac
echo.
echo Have you got all the info needed?
pause
cls
goto start

rem ###################### whoami #######################
:whoami
color 0d
whoami
pause
cls
goto start

rem ###################### pcinfo #######################
:pcinfo
color 0e
systeminfo
pause
cls
goto start

rem ###################### clearmgr#######################
:clearmgr
echo Just follow the On Screen instructions and Press OK, Press Delete and OK.
CleanMgr
echo DONE!!
pause
cls
goto start

rem ###################### defrag #######################
:defrag
echo You will need to run this program as Administrator
echo This will Defrag all volumes:
pause
defrag /C /H /V
pause
cls
goto start

rem ###################### perfmon #######################
:perfmon
color 0b
echo.
echo Please wait program starting…
PERFMON
pause
cls
goto start

rem ###################### CHKDSK#######################
:CHKDSK
echo Please enter the drive you would like to check?
echo.
Set /p DSK=
echo.
cls
echo Check disk initiate
CHKDSK %DSK%:
pause
cls
goto start
rem ###################### DRIVER#######################
:DRIVER
DRIVERQUERY
pause
cls
goto start

rem ###################### MIR #######################
:MIR

color 0c
echo Please Enter the Source DRIVE
echo.
set /p SOURCE=
echo Please Enter the Destination DRIVE
echo.
set /p DEST=
ROBOCOPY %SOURCE%: %DEST%: /MIR
pause
cls
goto start

rem ###################### recover #######################
:recover
echo Please Enter the Source file path
echo.
set /p SOURCE=
TYPE SOURCE
pause
cls
goto start

rem ###################### task #######################
:task
cls
echo TASK KILL OR START TASK MENU
echo.
echo What option would you like to execute?
echo.
echo 1) Task Kill
echo 2) start task
echo 3) back

echo.
set option=
echo.
set /p option=Select One:
echo.

if ‘%option%’==’1′ goto taskkill
if ‘%option%’==’2′ goto starttask
if ‘%option%’==’3′ goto back

################# taskkill ###################
:taskkill
echo What process would you like to end?
echo.
set /p task_name= task name without .exe
taskkill /f /im %task_name%.exe
pause
cls
goto task

################# starttask ###################
:starttask
echo What process would you like to start?
echo.
set /p task_name=
start %task_name%

cls
pause
goto task..

################# back ###################
:back
cls
goto start

rem ###################### exit #######################
:exit
echo Are you sure you want to EXIT?
pause
exit

Jo√£o

I take de liberty to change a litle your batch file.
i wope you don’t mind .
you can add those if you want:
displaydns
flush dns
ipconfig/realese
ipconfig/renew
routeprint
and remote assistant as well
title PC TOOLS (C) Marcus Meyer designed by NATHAN VAN NIEKERK Version 2.0
mode 48,40
@echo off
color 0c
cls
echo (C) Marcus Meyer designed by NATHAN VAN NIEKERK
echo.
cls
goto start
rem ####################### START ######################
:start
echo (C) Marcus Meyer designed by NATHAN VAN NIEKERK
echo.
mode 48,40
color 0a
echo %username% WELCOME TO PC TOOLS!!
echo What option would you like to execute?
echo.
echo NETWORKING:
echo _____________
echo 1) Ipconfig
echo 2) Ping an ip address
echo 3) Trace Root
echo 4) NetStat
echo 5) Get Mac address
echo.
echo SYSTEM INFO:
echo ______________
echo 6) Who am I
echo 7) PC INFO
echo 8) Performance Check
echo 9) Disk Check
echo 10) Driver Check
echo 11) Mirror Drive
echo 12) Recover Drive
echo.
echo WINDOWS TOOLS:
echo __________________
echo 13) Clear recycle bin and Temporary files
echo 14) Hard drive Defrag
echo 15) Start or End a Task
echo.
echo 16) Exit
echo.
set option=
echo.
set /p option=Select One:
echo.
if “%option%”==”1″ goto ipconfig
if “%option%”==”2″ goto ping
if “%option%”==”3″ goto tracert
if “%option%”==”4″ goto netstat
if “%option%”==”5″ goto getmac
if “%option%”==”6″ goto whoami
if “%option%”==”7″ goto pcinfo
if “%option%”==”8″ goto perfmon
if “%option%”==”9″ goto CHKDSK
if “%option%”==”10″ goto DRIVER
if “%option%”==”11″ goto MIR
if “%option%”==”12″ goto recover
if “%option%”==”13″ goto clearmgr
if “%option%”==”14″ goto defrag
if “%option%”==”15″ goto task
if “%option%”==”16″ goto exit
echo.
ECHO ‚Äú%option%‚ÄĚ is not valid please try again
goto start
ECHO.
rem ###################### Options #####################
rem ###################### ipconfig #######################
:ipconfig
mode 70,40
cls
color 0c
echo.
ipconfig
pause
cls
goto start
rem ###################### ping #######################
:ping
cls
color 0b
@echo off
mode 45,2
color 0F
set /p a=”Enter IP ADDRESS: ”
MODE 60,15
ping %a%
echo [———————————————————-]
pause
cls
goto start
rem ###################### tracert #######################
:tracert
mode 60,5
cls
color 0b
echo Please enter web page you would like to trace?
echo [EXAMPLE] http://www.google.com
echo.
Set /p trace=
mode 75,50
echo.
echo Trace Root initiate
tracert %trace%
pause
cls
goto start
rem ###################### netstat #######################
:netstat
@echo off
color 0F
:options
mode 45,10
cls
echo MENU OPTIONS:
echo =====================
echo a All links
echo e Ethernet Statistics
echo f Displays FDQN
echo n Addresses and ports
echo =====================
echo q to quit
echo =====================
set /p input=”Enter Options Here: ”

if “%input%”==”a” goto:a
if “%input%”==”e” goto:e
if “%input%”==”f” goto:f
if “%input%”==”n” goto:n
if “%input%”==”q” goto:start

echo Please choose from the Options listed above!
pause
goto:options

:a
mode 80,60
netstat.exe -a
pause
goto:options

:e
mode 80,15
netstat.exe -e
pause
goto:options

:f
mode 80,25
netstat.exe -f
pause
goto:options

:n
mode 80,20
netstat.exe -n
pause
goto:options
rem ###################### getmac #######################
:getmac
mode 60,25
@echo off
cls
color 0e
echo.
arp -a
echo.
echo Have you got all the info needed?
pause
cls
goto start
rem ###################### whoami #######################
:whoami
mode 45,5
color 0d
whoami
pause
cls
goto start
rem ###################### pcinfo #######################
:pcinfo
mode 80,60
cls
color 0e
systeminfo
pause
cls
goto start
rem ###################### perfmon #######################
:perfmon
mode 45,5
cls
color 0b
echo.
echo Please wait program starting!
PERFMON
pause
cls
goto start
rem ###################### CHKDSK#######################
:CHKDSK
mode 48,5
cls
echo Please enter the drive you would like to check?
echo.
Set /p DSK=
echo.
cls
echo Check disk initiate
CHKDSK %DSK%:
pause
cls
goto start
rem ###################### clearmgr#######################
:clearmgr
echo Just follow the On Screen instructions and Press OK, Press Delete and OK.
CleanMgr
echo DONE!!
pause
cls
goto start
rem ###################### defrag #######################
:defrag
echo You will need to run this program as Administrator
echo This will Defrag all volumes:
pause
defrag /C /H /V
pause
cls
goto start

rem ###################### DRIVER#######################
:DRIVER
mode 48,50
cls
DRIVERQUERY
pause
cls
goto start
rem ###################### MIR #######################
:MIR
color 0c
echo Please Enter the Source DRIVE
echo.
set /p SOURCE=
echo Please Enter the Destination DRIVE
echo.
set /p DEST=
ROBOCOPY %SOURCE%: %DEST%: /MIR
pause
cls
goto start
rem ###################### recover #######################
:recover
echo Please Enter the Source file path
echo.
set /p SOURCE=
TYPE SOURCE
pause
cls
goto start
rem ###################### task #######################
:task
mode 40,10
cls
echo TASK KILL OR START TASK MENU
echo.
echo What option would you like to execute?
echo.
echo T) Tasklist
echo 1) Task Kill
echo 2) start task
echo 3) back
echo.
set option=
echo.
set /p option=Select One:
echo.
if “%option%”==”T” goto tasklist
if “%option%”==”1″ goto taskkill
if “%option%”==”2″ goto starttask
if “%option%”==”3″ goto back
################# tasklist ###################
:tasklist
mode 48,50
cls
echo The fowlling process are actives!
tasklist
pause
cls
goto task
################# taskkill ###################
:taskkill
echo What process would you like to end?
echo.
set /p task_name= task name without .exe
taskkill /f /im %task_name%.exe
pause
cls
goto task
################# starttask ###################
:starttask
echo What process would you like to start?
echo.
set /p task_name=
start %task_name%
cls
pause
goto task..
################# back ###################
:back
cls
goto start
###################### exit #######################
:exit
mode 45,5
cls
echo Are you sure you want to EXIT?
echo Select c to cancel or press ok to exit
set /p input=”Enter Options Here: ”
if “%input%”==”ok” goto:ok
if “%input%”==”c” goto:start

Reply

Khaleel

Hi Nathan,

When I gave input as 1 and enter, it is returning error like this.

“√ī1√∂ is not valid please try again” for all the value it is displaying this error. please advice.

Regards,
Khaleel

Your comment