Habeeb's profileHABEEB ALI SHAIK PhotosBlogListsMore Tools Help

Blog


    working example of a backup script you can modify for your needs:

     

    @echo off
    :: variables
    set drive=G:\Backup
    set backupcmd=xcopy /s /c /d /e /h /i /r /y

    echo ### Backing up My Documents...
    %backupcmd% "%USERPROFILE%\My Documents" "%drive%\My Documents"

    echo ### Backing up Favorites...
    %backupcmd% "%USERPROFILE%\Favorites" "%drive%\Favorites"

    echo ### Backing up email and address book (Outlook Express)...
    %backupcmd% "%USERPROFILE%\Application Data\Microsoft\Address Book" "%drive%\Address Book"
    %backupcmd% "%USERPROFILE%\Local Settings\Application Data\Identities" "%drive%\Outlook Express"

    echo ### Backing up email and contacts (MS Outlook)...
    %backupcmd% "%USERPROFILE%\Local Settings\Application Data\Microsoft\Outlook" "%drive%\Outlook"

    echo ### Backing up the Registry...
    if not exist "%drive%\Registry" mkdir "%drive%\Registry"
    if exist "%drive%\Registry\regbackup.reg" del "%drive%\Registry\regbackup.reg"
    regedit /e "%drive%\Registry\regbackup.reg"

    :: use below syntax to backup other directories...
    :: %backupcmd% "...source directory..." "%drive%\...destination dir..."

    echo Backup Complete!
    @pause

    The above example backs up "My Documents", Favorites, Outlook Express email/address book, (all for the current user) and the Windows Registry. It copies the files to the directory defined in the %drive% variable, or "g:\Backup". If the script is ran multiple times, it will only rewrite if the source files are newer. It will create subdirectories as necessary, and it will retain file attributes. It can copy system and hidden files.

    In the above file, all lines that begin with "::" are comments. The "set drive=" and "set backupcmd=" near the top define two variables (referenced by %drive% and %backupcmd%), used a number of times throughout the file; the first being the location of the top directory where we want to backup, and the second the actual copy command with all necessary switches. All the "echo " lines in the file simpy output the line of text to the screen, and the lines beginning with %backupcmd% are the actual commands to execute.

    Note that most of the folders in the above backup example are subdirectories of the %USERPROFILE%... It is possible to simply backup the entire user profile with My Documents, Favorites, Outlook Express, Outlook, etc. by backing up this one folder. Here is an example (it assumes the above "drive" and "backupcmd" variables are set):

    %backupcmd% "%USERPROFILE%" "%drive%\%UserName% - profile"

    Backing up Other Directories and networked PCs

    You can backup other directories by simply creating more alike lines:

    %backupcmd% "...source dir..." "%drive%\...destination dir..."

    For example, if you'd like to backup "C:\Program Files\Microsoft Office"  to our destination "G:\Backup\MS Office" (and retain the directory structure) you'd need to add the following line to the batch file:

    %backupcmd% "C:\Program Files\Microsoft Office" "%drive%\MS Office"

    Here is another example, backing up the Administrator Profile on a machine on the LAN with computer name "Lianli":

    %backupcmd% "\\Lianli\c\Documents and Settings\Administrator"  "%drive%\Lianli - admin profile"

    Remember, you have to save the batch file with either .bat or .cmd extension, then just double-click to execute it.

    Using the Current Date

    Sometimes it is useful to create folders with the date incorporated in the folder name. Here is how to set the variable folder to the current date (assuming US system date format):

    set folder=%date:~10,4%_%date:~4,2%_%date:~7,2%
    %backupcmd% "...source dir..." "%drive%\%folder%\...destination dir..."

    It is also possible to use the current time in the folder name. The following example with incorporate both the current date and time to the minute, separated by underscores. There is an extra step that cleans up possible spaces in single-digit hours in the system time:

    set hour=%time:~0,2%
    if "%hour:~0,1%"==" " set hour=0%time:~1,1%
    set folder=%date:~10,4%_%date:~4,2%_%date:~7,2%_%hour%_%time:~3,2%
    %backupcmd% "...source dir..." "%drive%\%folder%\...destination dir..."

    Example - dated directories

    In the example below, we first set 3 variables: drive, folder, and backupcmd. The "drive" variable defines the root directory of our backups. The "folder" takes the 2 digit day value from the current date (US date format, taking 2 digits from the date command output, starting at the 7th character), which we will use as a subdirectory. The third variable, "backupcmd" defines our backup command with the appropriate command line switches we want to use.

    @echo off
    :: variables
    set drive=D:\Backup
    set folder=%date:~7,2%
    set backupcmd=xcopy /s /c /d /e /h /i /r /k /y
    echo ### Backing up directory...
    %backupcmd% "C:\Program Files\somedirectory" "%drive%\%folder%"
    echo Backup Complete!
    @pause

    This example will backup the "C:\Program Files\somedirectory" folder to "D:\Backup\[dd]" where [dd] is the current day of the month.  After a month, we will have 30ish daily copies of the backup... And, because of the xcopy command line switches chosen, following backups will only overwrite files that are newer, speeding up subsequent backups. Alternatively you can add a line to delete the %folder% directory prior to executing the %backupcmd% if you prefer to start clean (and take longer).

    Cleaning up

    It is usually a good idea to clean up temporary files, cookies, and history from the destination backup, as applicable. It is especially useful if you're backing up full, multiple user profiles and overwriting them periodically. Since temporary files and cookies change, your backed up directories will keep increasing with unnecessary files. To remedy this, the following code can be added to the backup script, or to a separate batch file. It will automatically search all subdirectories for "cookies", "temp" and "history", and then remove those directories:

    :: change to the destination drive first
    G:
    :: your parent backup directory
    drive=G:\Backup
    echo ### Searching for files to clean up...
    cd %drive%
    dir /s/b/ad \cookies > %drive%\cleanup.txt
    dir /s/b/ad \temp > %drive%\cleanup.txt
    dir /s/b/ad \history > %drive%\cleanup.txt

    echo ### Deleting cookies, temp files and history from backup dir
    for /f "delims=" %%J in (%drive%\cleanup.txt) do rd "%%J" /Q/S

    echo Cleanup complete
    @pause

    Note that you need to change to the destination drive, and the main backup directory before searching for files to delete. Any sub-folders that contain "cookies", "temp", or "history" will be deleted automatically. You can test to see what will be deleted by commenting out the "for /f ....." line (just add :: to the beginning of the line, or delete it from the batch file and add it again later). If that line is not present, the file will only list all files to be deleted in the cleaup.txt file, located in the destination directory (G:\Backup\cleanup.txt in the above example).  If you add the cleanup portion to the end of your  backup batch file, you may want to remove the "@pause" line at the end of the backup portion, so everything can execute without user interacion.

    Alternatively, there is a simpler one-line method of deleting specific subdirectories after backing up. The disadvantage of using this method is that you'd need another line for each separate directory to be removed... In other words, it doesn't work well when removing a large number of directories by similar names. Still, here is an example:

    rmdir /s /q "%drive%\%UserName%\Local Settings\Temporary Internet Files"

    Comments

    Please wait...
    Sorry, the comment you entered is too long. Please shorten it.
    You didn't enter anything. Please try again.
    Sorry, we can't add your comment right now. Please try again later.
    To add a comment, you need permission from your parent. Ask for permission
    Your parent has turned off comments.
    Sorry, we can't delete your comment right now. Please try again later.
    You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
    Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
    Complete the security check below to finish leaving your comment.
    The characters you type in the security check must match the characters in the picture or audio.

    To add a comment, sign in with your Windows Live ID (if you use Hotmail, Messenger, or Xbox LIVE, you have a Windows Live ID). Sign in


    Don't have a Windows Live ID? Sign up

    Trackbacks

    The trackback URL for this entry is:
    http://habeebshaikali.spaces.live.com/blog/cns!AC13A3C850A713DF!395.trak
    Weblogs that reference this entry
    • None