Windows Batch Scripting Guide For Beginners


Batch scripts are nothing but the sequence of commands which are executes one by one using command interpreter [cmd.exe]. The command line interpreter or cmd.exe is available in almost all versions of windows OS and located at c:\windows\system32\cmd.exe.

First of all you need to know the commands which are interpreted by cmd.exe, but before let's see how command are executes with command interpreter.The cmd.exe executes command in two modes :

1. Interactive Mode :  

In Interactive Mode we type commands in "command prompt". To start the command prompt just go to start Menu and type cmd on search box then hit enter. In this box type "echo hello world" and hit enter, after that command prompt will be return "hello world". "echo" command prints all the arguments.

 2. Non Interactive Mode or Batch Mode :

In Non Interactive Mode or Batch Mode we put all commands in a file and save it as "cmd.bat", where cmd is file name and ".bat" is the file extension of Batch files or Batch scripts. We simply creates Batch file using notepad, first open notepad and type these  

 @echo off  
 title My first Batch Script  
 echo ..........................  
 echo Hello Guys This is A batch Script  
 echo ..........................  
 pause    
 exit /b  


Now to go file Menu and click on save as option, then change save as type to all files and change the file name to cmd.bat then click to save button. Remember you could give any name to batch file but file extension is always .bat. To executes batch file just click on it.


The commands which are used in above script are :

@echo off :    command 'echo off' will be turn off the prompt. Prompt means the execution path of batch file. In my case the path is "C:\User\Ajay\Desktop\", your differ. After putting @ at the start of a command will prevents shown the execution of command in that line. (To test what @echo off command does just create another batch script similar to above and change @echo off to @echo on then see what happen.)

Title :    Title command is used to set the title of console window.

Pause :    Pause command is pause the command execution and wait for the user input, when user gives any input then next command will be executed.

Exit :    Exit command close the command processor or cmd.exe.

Some Batch Commands :

md :    [Make Directory] used to create a new directory.

Syntax :    md dir_name

cd :    [Change Directory] used to change directory.

Syntax :    cd dir_name

copy :    used to coping files

Syntax :    copy source_file_name destination_file_name

move :    used to moving files

Syntax :    move source_file_name destination_file_name

ren :    used to rename files

Syntax :    ren old_file_name new_file_name

del :    used del files 

Syntax :    del file_name

dir :    used to listing in current directory

Syntax :    dir

rem :    used to write comments or description inside batch scripts.

Syntax :    rem this is comment

we also write comments using '::' sign

Syntax :    :: This is comment

Now there is a simple script which demonstrate the above commands


These are some besic commands used in batch scripting. For more batch commands check these links :
 @echo off  
 title Script test  
 md my_dir  
 rem create a directory my_dir  
 dir > dir_list.txt  
 rem list all files in current directory with dir command and save the output in dir_list.txt  
 copy dir_list.txt .\my_dir\  
 rem copy dir_list.txt in my_dir '.' sign before my_dir specify the current working directory.  
 del dir_list.txt  
 rem delete dir_list.txt  
 cd my_dir  
 rem change directory to my_dir  
 ren dir_list.txt renamed_list.txt  
 rem rename dir_list.txt to renamed_list.txt  
 pause  
 exit /b  


windows commands List :        http://ss64.com/nt/
windows command reference : http://www.microsoft.com/en-in/download/details.aspx?id=2632

Variables:

To declare a variable use set command

Syntax :    set name="Ajay Kumar"

and to get the variable's data use %variable_name% 

Syntax :    echo %name%

To know more about set command just type 'set /?' in command prompt or look at the windows command reference help file. Now here is an example program of set command.

 @echo off  
 title TEXT File Creater  
 echo.   
 echo.  
 set /p data="Enter the File Content = "  
 echo.  
 echo.  
 set /p name="Enter file Name = "  
 echo %data% > %name%.txt  
 echo.  
 echo File created Successfully. !! Press Any key To Exit.  
 pause > nul  
 exit /b  

Control Structure:

Loop in Batch Scripts :

1. Goto Loop


 @echo off  
 :loop  
 msg * Hello world!!  
 Pause  
 goto loop  



2. For Loop :    Syntax of For loop is  'for %%{variable} in (set) do (command)'

 @echo off  
 FOR %%i IN (Windows, Linux, Mac_OS) DO (echo %%i)  
 Pause  
 exit /b  

For loop on numeric mode

Syntax :    'for /L %%{variable} in (starting point, step, end point) do (command)

 @echo off  
 FOR /L %%i IN (1, 1, 20) DO (echo Hello world!!!)  
 Pause  
 exit /b  

the above script prints 'Hello world!!!' 20 times, In For loop (1, 1, 20), where first '1' is starting point and second '1' is step means first '1' is increased by 1 at every loop and 20 is end point, when first 1's value is 20 then for loop is end. We also write this loop as : 'for /L %%i in (20, -1, -1) do (echo hello world)'

Conditional Statement in Batch Script:

1. if-else :

 @echo off  
 :Again  
 set /p num="Enter A Number{0 to continue}: "  
 if %num%==0 (goto Again) else (  
 echo.  
 echo You have entered %num%)  
 pause > nul  
 exit /b  

2. if not-else :

 @echo off  
 echo.  
 set password=12345  
 :pass  
 set /p user_input="Enter The Password : "  
 if not %password% == %user_input% (  
 echo Wrong Password ?  
 echo.  
 goto pass ) else (  
 echo.  
 echo Congratulations..!! You have SuccessFully Log in  
 pause > nul  
 exit /b)  

3. if exist :

 @echo off  
 echo.  
 if exist "C:\Windows\SysWOW64" (echo Your Operating System is 64 bit) else (  
 echo Your Operating System is 32 bit)  
 echo.  
 Pause  
 exit /b  

Arguments:

We also use arguments in batch scripts, to access arguments use %1, %2 .... where %1 denotes first argument and %2 denotes second. Here is an example script which shows how to use Arguments :

 @echo off  
 set /a ans=%1+%2+%3  
 echo.  
 echo The Sum of %1, %2, %3 is %ans%.  
 pause > nul  
 exit /b  

Above program takes three arguments, then print their sum. Make sure run this script via command line.


Coloring in Batch Script:

To create a color-full Batch script use color command, with this command we can change the text color as well as background color. The color code of Batch script is 

0 = Black      8 = Gray
1 = Blue        9 = Light blue
2 = Green     A = Light green
3= Aqua       B = Light aqua
4 = Red        C = Light red
5 = Purple     D = Light purple
6 = Yellow    E = Light yellow
7 = White      F = Bright white

For more info about color command type 'color /?' in command prompt. To change the text color only type 

Syntax    :    color [color code]
Example :    color a

For changing text and background color use :

Syntax    :    color [background color][text color]
Example :    color 1a

try out this command with different combinations of colors.

Multicolored Batch Script:

Now here is a Batch Script which shows multiple colors in a single script :
 
 @echo off  
 setlocal EnableDelayedExpansion  
 for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (  
  set "DEL=%%a"  
 )  
 rem Prepare a file "X" with only one dot  
 <nul > X set /p ".=."  
 echo.  
 call :color 0a "  Hello Guys This IS Test....    "  
 echo.  
 call :color 0b " This IS The Second Colour........  "  
 echo.  
 call :color 0c " This IS The Third Colour........  "  
 echo.  
 echo.  
 pause >nul  
 del X  
 exit /b  
 :color  
 set "param=^%~2" !  
 set "param=!param:"=\"!"  
 findstr /p /A:%1 "." "!param!\..\X" nul  
 <nul set /p ".=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"  
 exit /b  

Script source page :

http://stackoverflow.com/questions/4339649/how-to-have-multiple-colors-in-a-batch-file/5344911%235344911

Functions in Batch Script:

We can also create functions in Batch programming. Functions are simply a reusable piece of code, in Batch programming a function is creates using a Label and goto :EOF command. Here is an Example of a simple function

 :print  
 Echo Hello this is my first function.  
 Echo Which Prints this Message.  
 Goto :EOF   

A function can be called by call command which followed by function's label.

Example :    call :print

So the above script look like this
 @echo off   
 call :print  
 pause > nul  
 exit/b  
 :print  
 Echo Hello this is my first function.  
 Echo Which Prints this Message.  
 Goto :EOF  

for more information and detailed tutorial about functions check out below link

http://commandline.co.uk/lib/treeview/index.php
http://www.dostips.com/DtTutoFunctions.php

Now here is function written by me which returns the IP address of given website url

 @echo off & setlocal ENABLEEXTENSIONS  
 echo.  
 set /p url="Enter The WEBSITE URL : "  
 call :SiteIp %url% ip  
 echo.  
 echo The IP Address of %url% is : %ip%   
 pause > nul  
 goto :EOF  
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
 :SiteIp %address% ip  
 ::  
 :: Func: Return the IP address of given Website URl.   
 ::    If function fails, it shows "Problem in Connection.??"  
 ::  
 :: Args: %1 var for WebSite URl & %2 to receive IP Address.   
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
 setlocal ENABLEEXTENSIONS & set "ans=Problem in Connection.??"  
 for /f "tokens=3" %%a in ('ping -n 1 %1^|findstr /B Pinging') do ( set d=%%a)  
 if exist %d%=nul ( endlocal & set "%2=%ans%" & goto :EOF)  
 for /f "delims=[]" %%b in ('echo %d%') do ( set data=%%b )  
 endlocal & set "%2=%data%"  
 goto :EOF  
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  


In this below link has a huge collection of ready made functions

http://www.dostips.com/DtCodeCmdLib.php

Here is the list of links for Batch Scripting References :

http://www.dostips.com/
http://ss64.com/nt/
http://en.wikibooks.org/wiki/Windows_Batch_Scripting