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”.
blatpath – The path to blat.exe, which is used to email your reports to you.
relayserver – An email server your computer has access to. This is required to have your report email sent to you.
email – The email your reports will be sent to.
fromemail – This 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.
emailuser – Your email server user login.
emailpass – Your email server password.
source – The 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.
destination – The 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:\).
textlogpath – Path to the text logfile which will track progress and be emailed then archived.
archivepath – The place logs will be placed for storage. Files will be renamed appropriately.
username – This 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.
note – Just 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
:VariablesREM 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=ScriptsBackupREM 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 goodtogogoto noparams
:goodtogo
set server=%computername%
set logpath=C:\Documents and Settings\%username%\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\dataif 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%" /yecho 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
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.
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?
Got ya on email Anthony!
Any news about that error?
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.
Email me your settings and i’ll take a look for you! What kind of errors are you getting?
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.
Fixed! Raf’s issue was because he was running this under windows XP Dutch edition. Thanks for your help in figuring this out Raf.
I can’t get the script to accept more then one location in the .bks file.
“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.
Hi Eric,
will it work if we leave the source variable blank for systemstate backup ??
@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
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
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.
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
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.
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
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