Automatic and Dynamic All Purpose NTBackup.exe Script with Email Notifications and Log Archiving (EricBackup.bat)

This script can do a SystemState, Normal or Differential backup via NTBackup from any location, to any location and have an email report sent to you shortly before the logfile is archived in your designated directory. All you have to do is set all the settings that i describe below in the top section of the script, put in any mapped drives you need to be mapped (net use x: \\server\share /user:user pass) where I have it commented and run it with the desired backup type specified. You can run ericbackup.bat alone to see a help display, too. This certainly isn’t anything new, but it is handy because this script can be easily molded, with it’s built in settings, to work in almost any situation. If you are running this as a task, you must remember to include the type of backup in the run line of the task. Simply specifying the .bat will not work, you must specify as the example useage below shows.

I would also like everyone to know that this file can be run remotely with psexec… see this article for PowerShell and this article for batch on how to do that. But remember: If you use psexec to run this remotely, the user will be “Default User”.

blatpathThe path to blat.exe, which is used to email your reports to you.
relayserverAn email server your computer has access to. This is required to have your report email sent to you.
emailThe email your reports will be sent to.
fromemailThis is the address the email will appear to be sent from. Important because some mailservers will filter mail baised ont his. Your own email should be fine.
emailuserYour email server user login.
emailpassYour email server password.
sourceThe directory your backup will be targeting. Systemstate backups will ignore this automatically. If you’re targeting the root of a drive, you leave out the ending \ character (ex: c: not c:\). If you want to use a ANSI .bks file, you can specify that here with an @ symbol ahead of it. EX) @c:\filelist.bks Using a unicode .bks file lets you list multiple target locations.
destinationThe location your backup files will be placed into… in *.BKF format. If you’re targeting the root of a drive, you leave out the ending \ character (ex: c: not c:\).
textlogpathPath to the text logfile which will track progress and be emailed then archived.
archivepathThe place logs will be placed for storage. Files will be renamed appropriately.
usernameThis is very important. This is the name of the folder in your user profile. For example, if you opened a CMD window you would see the path to your local profile. This variable is the name of the last folder in that path. If my user folder is eric.greer then this will be eric.greer. Most of the time this folder name is the exact same as the user name it will run under. If this script is running in remotely via PSExec or as the system account, it will require Default User, without quotes, to be entered here.
noteJust a note. This will be placed on your email subject along with on the filename. Good to include the location. Spaces are not supported very well here, and don’t use quotation marks either.

Example Useage: (After setting variables on the top of the script!)

ericbackup.bat normal

ericbackup.bat systemstate

ericbackup.bat differential

This will start a normal backup with the settings you specified within the batch file.

EricBackup.bat

@echo off
:Variables

REM Insert your variables below before running this batch from the command line.

set blatpath=c:\programs\blat.exe
set relayserver=localhost
set email=blog@integrii.net
set fromemail=blog@integrii.net
set emailuser=your.user
set emailpass=your.pass
set source=C:\Scripts
set destination=K:\Backup
set textlogpath=K:\Backup\%computername%-Backup.txt
set archivepath=K:\Backup\OldLogs
set username=administrator
set note=ScriptsBackup

REM Map your drives here if you need to.

REM If you use psexec to run this remotely, the user will be "Default User"
REM Dont touch anything below here.
REM Dont touch anything below here.
REM Dont touch anything below here.
REM Dont touch anything below here.
REM Dont touch anything below here.

:TimeStuffFromMichaelSmith

for /F "tokens=1-4 delims=/ " %%i in ('date /t') do (
set Month=%%j
set Day=%%k
set Year=%%l
set Date=%%j-%%k-%%l
set dirdate=%%j%%k%%l
)
for /f "Tokens=1-2 delims=/ " %%i in ('time /t') do (
set tm=%%i
set ampm=%%j
)

:Preparation

echo.
echo **************************
echo EricBackup.bat Version 2.8
echo EricGreer@GMail.com
echo http://blog.integrii.net/?p=76
echo **************************
echo.

if "%1" == "systemstate" set backupmode=systemstate & echo "%1 mode selected." & goto goodtogo
if "%1" == "normal" set backupmode=normal & echo "%1 mode selected." & goto goodtogo
if "%1" == "differential" set backupmode=differential & echo "%1 mode selected." & goto goodtogo
if "%1" == "Systemstate" set backupmode=systemstate & echo "%1 mode selected." & goto goodtogo
if "%1" == "Normal" set backupmode=normal & echo "%1 mode selected." & goto goodtogo
if "%1" == "Differential" set backupmode=differential & echo "%1 mode selected." & goto goodtogo
if "%1" == "SystemState" set backupmode=systemstate & echo "%1 mode selected." & goto goodtogo

goto noparams

:goodtogo

set server=%computername%
set logpath=C:\Documents and Settings\%username%\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data

if not exist "%archivepath%" md "%archivepath%" & echo "Archive Path did not exist, so it was created." >> %textlogpath%
if exist "%textlogpath%" del "%textlogpath%" & echo "Previous %textlogpath% existed, so it was deleted." >> %textlogpath%
if exist "%logpath%\*.log" del "%logpath%\*.log" & echo "Previous ntbackup logfile existed, so it was deleted." >> %textlogpath%

:Backup

echo %server% backup started at %tm% %ampm% on %Year%-%Month%-%Day% into "%destination%" >> %textlogpath%
echo %server% backup starts %tm% %ampm% on %Year%-%Month%-%Day% into "%destination%"

if %backupmode% == systemstate ntbackup.exe backup systemstate "%source%" /n "%server%-Backup" /d "%server%-Backup" /v:no /r:no /rs:no /hc:off /j "%server%-Backup" /l:s /f "%destination%\%server%-Backup-%Year%-%Month%-%Day%-SYSTEMSTATE.bkf" >> %textlogpath%
if %backupmode% == differential ntbackup.exe backup "%source%" /n "%server%-Backup" /d "%server%-Backup" /v:no /r:no /rs:no /hc:off /m differential /j "%server%-Backup" /l:s /f "%destination%\%server%-Backup-%Year%-%Month%-%Day%-DIFFERENTIAL.bkf" >> %textlogpath%
if %backupmode% == normal ntbackup.exe backup "%source%" /n "%server%-Backup" /d "%server%-Backup" /v:no /r:no /rs:no /hc:off /m normal /j "%server%-Backup" /l:s /f "%destination%\%server%-Backup-%Year%-%Month%-%Day%-NORMAL.bkf" >> %textlogpath%

:RenameLogs

if exist "%logpath%\*.log" ren "%logpath%\*.log" %server%-Backup.log
if exist "%logpath%\%server%-Backup.log" copy "%logpath%\%server%-Backup.log" "%archivepath%" /y

echo NTBackup.exe .log file archived at "%archivepath%\%note%-%server%-%Year%-%Month%-%Day%.log" >> %textlogpath%
echo EricBackup.bat .txt file archived at "%archivepath%\%Year%-%Month%-%Day%-%server%-%note%.txt" >> "%textlogpath%"

:Send
%blatpath% "%textlogpath%" -attach "%archivepath%\%server%-Backup.log" -t %email% -s "%server% Backup Log %Year%-%Month%-%Day% at %tm% %ampm%" -i %fromemail% -f "%fromemail%" -q -server "%relayserver%" -u "%emailuser%" -pw "%emailpass%"

:Archive
if exist "%archivepath%\templog.txt" del "%archivepath%\templog.txt"
if exist %textlogpath% copy "%textlogpath%" "%archivepath%\templog.txt"
if exist "%archivepath%\%Year%-%Month%-%Day%-%server%-%note%.txt" del %archivepath%\%Year%-%Month%-%Day%-%server%-%note%.txt
if exist %archivepath%\templog.txt ren %archivepath%\templog.txt "%Year%-%Month%-%Day%-%server%-%note%.txt"

if exist "%archivepath%\%note%-%server%-%Year%-%Month%-%Day%.log" del "%archivepath%\%note%-%server%-%Year%-%Month%-%Day%.log"
if exist "%archivepath%\%server%-Backup.log" ren "%archivepath%\%server%-Backup.log" "%note%-%server%-%Year%-%Month%-%Day%.log"
if exist "%archivepath%\%server%-Backup.log" del "%archivepath%\%server%-Backup.log"
if exist "%logpath%\%server%-Backup.log" del "%logpath%\%server%-Backup.log"

if exist "%textlogpath%" del "%textlogpath%"

goto eof

:noparams
echo This file must be configured by opening it in notepad and setting the variables in the variables section at the top of the script.
echo You do not need to touch anything else beyond the variables with remarks above them!
echo To run the file after you configure it in notepad you must specify a backup type as the first paramiter.
echo.
echo EXAMPLE 1:
echo ericbackup Systemstate
echo.
echo EXAMPLE 2:
echo ericbackup Normal
echo.
echo EXAMPLE 3:
echo ericbackup Differential
echo.
echo **************************
echo.

:eof

Download BLAT

This script has been a lot of work to get just right, and I would appreciate it if any problems are reported to me. This is a big timesaver for me and i use it every other day in different environments with no problems.

18 Responses to “Automatic and Dynamic All Purpose NTBackup.exe Script with Email Notifications and Log Archiving (EricBackup.bat)”


  1. 1 Anthony Hewitson

    Hey Eric,

    Great work on the batch file, I have a quick question which may be completely dumb, but i will ask anyway!………. when saving the file from a text to .bat….the options to save as Unicode or ANSI comes up…. I have been saving this as Unicode and when i run the batch file it doesn’t like it at all……. any top tips?

  2. 2 Eric Greer

    Got ya on email Anthony!

  3. 3 Dewald

    Any news about that error?

  4. 4 Eric Greer

    Just save the file as ANSI when prompted (if prompted). There is probably some character in there that resulted from posting this online. The script does seem to work fine as long as you just save as ANSI and continue.

    Should work! Let me know.

  5. 5 Eric Greer

    Email me your settings and i’ll take a look for you! What kind of errors are you getting?

  6. 6 Raf

    Hello, can anybody give me an example of a fully configured batch-file.
    Having some problems with the variables…

    And yes, I’m quite new to batch-files.

    Thanks in advance.

  7. 7 Eric Greer

    Fixed! Raf’s issue was because he was running this under windows XP Dutch edition. Thanks for your help in figuring this out Raf.

  8. 8 David

    I can’t get the script to accept more then one location in the .bks file.

  9. 9 lava

    “systemstate mode selected.”
    COMPUTERNAME backup starts 15:48 on 2009-01-06 into “D:\Auto Backups”
    The file cannot be copied onto itself.
    0 file(s) copied.
    The system cannot find the path specified.
    ‘and’ is not recognized as an internal or external command,
    operable program or batch file.

  10. 10 lava

    Hi Eric,

    will it work if we leave the source variable blank for systemstate backup ??

  11. 11 Eric Greer

    @david: Try making sure your file is in UNICODE format and reference it with an @ sign.

    @lava: Looks like you named your computer COMPUTERNAME… is that right?? I don’t think it will work if you leave the source variable blank, but you could try renaming it if your computer is in fact named COMPUTERNAME

  12. 12 Niklas

    Hi!

    I’ve finished making a batch file for taking backups from our system to a NAS disc. I’m a newbie at making batch files, from what i can read in your code it’s hard to modify for only sending a notification e-mail with the backuplog.

    So how should i do in order to send a notification mail with our backuplog?

    (.bat file as follows)
    net use x: \\XX.XXX.XXX.XXX\backup /user:*username* *password*
    REM this maps our NAS to X:

    ntbackup backup “@C:\test\backup.bks” /m normal /f “X:\veckobackup.bkf” /l:s
    REM backs up files specified in backup.bks to X: and saves a logfile

    end

    Thanks in advance!
    Niklas

  13. 13 Simon Hester

    Hi

    Found your script for automatic scheduling of backups.

    I’m very new to all this and could do with some help.

    I’ve got as far as the variables and have been able to insert the net use stuff needed to connect up tot he nas drive.

    But after that i seem to be lost.

    Can i ask were exactly do you add the variable for the type of backup? and whats the code.

    Also on this point can the script handle doing incremental backups?

    Do i need to create a separate bks file that includes all the files i want to backup? are there any examples of this? would this backup file need to be located in the same folder as the bat file.

    Thanks for the help.

  14. 14 Simon Hester

    Hi

    I’m very new to scripting and could do with a little help.

    The above scripts looks like just the thing i need to help me automate the backups at my school. But that said i’m a bit lost as to how to get it to work.

    I’ve managed to get the varibles put in at the top. but after that i’m lost.

    My questions are

    1. how do you create the backup list file in NTBackup?
    2. can this script complete incremental backups?
    3. were do you put the varible and what is the line of code you put to set the script to run the different types of backups?

    If someone has a working example they are using that wouldbe great i can then work from that possibly.

    Any help would be great.

    Thanks Simon

  15. 15 Paul

    Very nice batch file. Blat does not seem to work for me when I schedule the batch file. However, when I run it from CMD, I was able to receive an email. Any idea why this happen?

    Also,the server I am backing up is also the email server.

  16. 16 Kevin

    Blat. nice looking script. if (which I am and de-allocating and free tape every week is pain) if a person were using a 4 tape pool with a weeklybk.bks file. could you automate the script to allow for X many tapes and roll the numbers weekly. then check to make sure the right tape was in and de-allocate it and free it before the backup? I currently have the backup scheduled in system tasks which works as long as you remember to go to compmgmmt.msc and change the name in the media pool to next tape then de-allocate it and then free it so it is ready for backup to run. and there has been times one step is forgot or over looked and presto backup aborts and you end up redoing the next day.

    thanks
    Kevin

  17. 17 Kelvin Stroes

    Dear Eric Greer
    first i like to say this scripts is really wonderfull,
    likte the dynamics in it.

    For now the scrips run perfect, but is it possible to mail a report to multiple mail adresses. my first idea maybe the same as yours:”Distribution group”. but the problem is that the report needs to be send to an internal and 2 external adresses.

    i have tried to set it in an external file with the option @path
    and with the ; mark. but non of them works and with these options it won’t mail at all.

    so maybe you could help me out this little issue

  1. 1 Adaptation to EricBackup.bat at Logical Tech

Leave a Reply