As I have briefly mentioned in my previous posts, for my day job I am the primary technical resource for a small business and as a “side gig” I manage web servers for hosting companies. One of the great benefits to this is I have become quite adept at developing command line scripts, or “batch” scripts.
One of the most common, and well suited, applications for a command line script is data backup. Command line scripts can be automated to run at any time without any human interaction and are only limited by… well, nothing.
Why Command Line Scripts?
Having experience with both commercial and free backup programs, I always find command line scripts to be, by far, the most effective tool for the job. Here are a few reasons why:
- Native Commands: What better way to backup data than by using the functions made available through the program which creates the data. Whether this is the operating system itself via a simple file copy command or a database command to produce a restorable binary file, the source program knows how best to back itself up.
- Ultimate Control: Since a command line script follows a simple step-by-step procedure, you know exactly what is happening and can easily modify the behavior.
- Fast: Since everything is a native command, nothing is subject to interpretation. Again, you are using commands provided by the program itself, so overhead is kept to a minimum.
- Powerful: I have yet to see a backup task which cannot be accomplished through a command line script… and I have done some funky stuff. Albeit, some research and “trial and error” may be required, unless you need something incredibly unique, typically the built in functions and features of the scripting language you are using is more than sufficient.
- Free and Flexible: Obviously, a command line script does not cost anything (outside the time to develop it), so the emphasis I want to make is command line scripts can be copied to and implemented on other systems and quickly adapted with little to no time or cost. Compare this to the cost of purchasing licenses for backup software on several servers and/or desktop machines.
A Quick Overview Of The Backup Batch Script
Since a lot of people do not have the need/time/desire to learn command line scripting, it is considered somewhat of a “black art”. So to demonstrate the power of the command line, I am providing a simple Windows batch script to backup your important data. This configurable and customizable script does not
require any knowledge (or willingness to learn) of the Windows batch scripting language.
What the backup script does:
- Creates full or daily incremental (see below for a definition) backups of files and folders you specify in a separate configuration text file (see below).
- When a folder is provided, that folder and all sub-folders are backed up.
- When a file is provided, just that file is backed up.
- Compresses (zips) the backed up files. After all files to be backed up are copied, they are compressed to save space. 7-Zip is required to be installed on your system for this to work.
- Dates the compressed file and moves it to a storage location. After the backup files are compressed, the resulting archive is given a file name according to the current date and then moved to a configured storage location, such as an external drive or network location.
- Cleans up after itself. After all tasks are completed, the batch script cleans up all the temporary files it created.
Requirements:
Windows 2000/XP/2003/Vista,
7-Zip (it’s free).
Configuration file:
The configuration file is simply a text file which contains files and folders to backup, entered one backup item per line. This file must be named “BackupConfig.txt” and be located in the same folder as the backup script. Here is an example of a BackupConfig.txt file (note, the first line is always ignored):
# Enter file and folder names, one per line.
C:\Documents and Settings\Jason Faulkner\Desktop C:\Documents and Settings\Jason Faulkner\My Documents\Important Files C:\Scripts\BackupScript.bat
The example above would backup the Windows user Jason Faulkner’s desktop (and all folders on the desktop), the folder called “Important Files” inside of My Documents (and all folders inside “Important Files”) and the file “BackupScript.bat” inside the C:\Scripts directory.
Types of backups:
- Full backup: A complete copy of all files and folders (including sub-folders) are included in the backup.
- Incremental backup: When a folder is provided, only files created or modified on the current date are
backed up. When a file is provided, it is always backed up, regardless of when it was modified.
The Data Backup Windows Batch Script
I want to emphasize this script is very basic, as all it does is create backups by a utilizing a simple file copy. There are some configuration options you can set:
- The backup storage location where the resulting compressed backup files are stored.
- The day of the week the full backup is run (any other day would run an incremental backup).
- Location of where 7-Zip is installed on your computer. The script is automatically set to look in the default location.
If you have any suggestions or feature requests, please comment below. I would really love to do a follow up article to this post which features an updated script based on reader input.
If you need instructions on how to “use” this script or set up a scheduled task, take a look at the links below the script source.
Without further ado, here it is:
Note: Since the quotes do no display correctly below (and as a result can mess up the script), I have included a plain text link below the script which you can use to get an accurate source to copy from.
@ECHO OFF
REM BackupScript
REM Version 1.01, Updated: 2008-05-21
REM By Jason Faulkner (articles[-at-]132solutions.com)
REM Performs full or incremental backups of folders and files configured by the user.
REM Usage---
REM > BackupScript
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
REM ---Configuration Options---
REM Folder location where you want to store the resulting backup archive.
REM This folder must exist. Do not put a '\' on the end, this will be added automatically.
REM You can enter a local path, an external drive letter (ex. F:) or a network location (ex. \\server\backups)
SET BackupStorage=C:\Backup
REM Which day of the week do you want to perform a full backup on?
REM Enter one of the following: Sun, Mon, Tue, Wed, Thu, Fri, Sat, *
REM Any day of the week other than the one specified below will run an incremental backup.
REM If you enter '*', a full backup will be run every time.
SET FullBackupDay=*
REM Location where 7-Zip is installed on your computer.
REM The default is in a folder, '7-Zip' in your Program Files directory.
SET InstallLocationOf7Zip=%ProgramFiles%\7-Zip
REM +-----------------------------------------------------------------------+
REM | Do not change anything below here unless you know what you are doing. |
REM +-----------------------------------------------------------------------+
REM Usage variables.
SET exe7Zip=%InstallLocationOf7Zip%\7z.exe
SET dirTempBackup=%TEMP%\backup
SET filBackupConfig=BackupConfig.txt
REM Validation.
IF NOT EXIST %filBackupConfig% (
ECHO No configuration file found, missing: %filBackupConfig%
GOTO End
)
IF NOT EXIST "%exe7Zip%" (
ECHO 7-Zip is not installed in the location: %dir7Zip%
ECHO Please update the directory where 7-Zip is installed.
GOTO End
)
REM Backup variables.
FOR /f "tokens=1,2,3,4 delims=/ " %%a IN ('date /t') DO (
SET DayOfWeek=%%a
SET NowDate=%%d-%%b-%%c
SET FileDate=%%b-%%c-%%d
)
IF {%FullBackupDay%}=={*} SET FullBackupDay=%DayOfWeek%
IF /i {%FullBackupDay%}=={%DayOfWeek%} (
SET txtBackup=Full
SET swXCopy=/e
) ELSE (
SET txtBackup=Incremental
SET swXCopy=/s /d:%FileDate%
)
ECHO Starting to copy files.
IF NOT EXIST "%dirTempBackup%" MKDIR "%dirTempBackup%"
FOR /f "skip=1 tokens=*" %%A IN (%filBackupConfig%) DO (
SET Current=%%~A
IF NOT EXIST "!Current!" (
ECHO ERROR! Not found: !Current!
) ELSE (
ECHO Copying: !Current!
SET Destination=%dirTempBackup%\!Current:~0,1!%%~pnxA
REM Determine if the entry is a file or directory.
IF "%%~xA"=="" (
REM Directory.
XCOPY "!Current!" "!Destination!" /v /c /i /g /h /q /r /y %swXCopy%
) ELSE (
REM File.
COPY /v /y "!Current!" "!Destination!"
)
)
)
ECHO Done copying files.
ECHO.
SET BackupFileDestination=%BackupStorage%\Backup_%FileDate%_%txtBackup%.zip
REM If the backup file exists, remove it in favor of the new file.
IF EXIST "%BackupFileDestination%" DEL /f /q "%BackupFileDestination%"
ECHO Compressing backed up files. (New window)
REM Compress files using 7-Zip in a lower priority process.
START "Compressing Backup. DO NOT CLOSE" /belownormal /wait "%exe7Zip%" a -tzip -r -mx5 "%BackupFileDestination%" "%dirTempBackup%\"
ECHO Done compressing backed up files.
ECHO.
ECHO Cleaning up.
IF EXIST "%dirTempBackup%" RMDIR /s /q "%dirTempBackup%"
ECHO.
:End
ECHO Finished.
ECHO.
ENDLOCALPlain text source is available here: Jason Faulkner’s Backup Script
If you need help getting started with implementing this script, here are a couple of links to help you out:
This is the same script I use to backup my computer daily (with a couple of modifications of course), so I know it works very well. I hope you find it useful.
Enjoy.

Like what you read?
If so, please join over 28,000 people who receive our exclusive weekly newsletter and computer tips, and get FREE COPIES of 5 eBooks we created, as our gift to you for subscribing. Just enter your name and email below:








Pingback: Backup Platinum Review: Nice and Easy » PCMech