robocopy

@echo off
title Backing Up Files...
color A

rem ******************************************************************************************
rem * Use variable BV to define location of backup storage volume.                           *
rem * Do not include trailing '\' character. Do not enclose paths with spaces in quotes.     *
rem ******************************************************************************************

set BV=C:\tmp

rem ******************************************************************************************
rem * Use variable EXC to define the name of directories to be EXCluded from the backup.     *
rem *                                                                                        *
rem ******************************************************************************************

set EXC="Temp" "TMP" "Temporary Internet Files" "Cookies" "Recent"

rem ******************************************************************************************
rem * Set the backup file TTL (Time To Live) in days.  The backup script will not maintain   *
rem * backup history beyond the specified number of days.  This is a crude way of keeping    *
rem * the backup volume from being overfilled.  Adjust this value to provide maxiumum backup *
rem * history for the amount of data that is being backed up, given the amount of disk space
rem * available to store it.                                         *
rem ******************************************************************************************

set BTTL=32

rem ******************************************************************************************
rem * Check to see if the defined backup storage volume is accessible. Some external storage *
rem * devices will enter a power saving mode (sleep) that may cause this process to fail,    *
rem * so we'll check to see if the OS reports the volume as available.                         *
rem ******************************************************************************************

echo.
echo  Initializing, please wait...
echo.

dir %BV%

if not exist "%BV%" (
    title Backup Process Failed
    color C
    echo.
    echo.
    echo.
    echo.
    echo   The backup volume, %BV%, appears to be inaccessible.  You may not perform
    echo   a backup at this time.
    echo.
    echo.
    echo.
    echo.
    pause
    exit
)

rem ******************************************************************************************
rem *  Determine the month week, time, and day numbers for the construction of the backup    *
rem *  file names.                                                                           *
rem ******************************************************************************************

FOR /F "TOKENS=1,2* delims=/ " %%A IN ('DATE/T') DO SET MON=%date:~3,2%
FOR /F "TOKENS=1,2,3* delims=/ " %%A IN ('DATE/T') DO SET DAY=%date:~0,2%
FOR /f "TOKENS=1,2,3 delims=: " %%A in ('TIME /T') do set TM=%date:~-4,4%

IF %MON% == 01 (SET MONTH=Gennaio
 goto :begin)
IF %MON% == 02 (SET MONTH=Febbraio
 goto :begin)
IF %MON% == 03 (SET MONTH=Marzo
 goto :begin)
IF %MON% == 04 (SET MONTH=Aprile
 goto :begin)
IF %MON% == 05 (SET MONTH=Maggio
 goto :begin)
IF %MON% == 06 (SET MONTH=Giugno
 goto :begin)
IF %MON% == 07 (SET MONTH=Luglio
 goto :begin)
IF %MON% == 08 (SET MONTH=Agosto
 goto :begin)
IF %MON% == 09 (SET MONTH=Settembre
 goto :begin)
IF %MON% == 10 (SET MONTH=Ottobre
 goto :begin)
IF %MON% == 11 (SET MONTH=Novembre
 goto :begin)
IF %MON% == 12 (SET MONTH=Dicembre
 goto :begin)

:begin

IF %DAY% LEQ 31 SET WEEK=Four
IF %DAY% LEQ 21 SET WEEK=Three
IF %DAY% LEQ 14 SET WEEK=Two
IF %DAY% LEQ 07 SET WEEK=One

echo.
echo.
echo.
echo   Beginning backup process, please wait...
echo.
echo.
echo.

rem ******************************************************************************************
rem * Before we copy a bunch of backup data to the backup volume, let's get rid of the old   *
rem * stuff.  All files older than the amount of days defined by BTTL are deleted.           *
rem ******************************************************************************************

if exist "%BV%" (
    forfiles /p %BV% /d -%BTTL% /c "CMD /Q /C @rmdir /S /Q @PATH"
    forfiles /p %BV% /d -%BTTL% /c "CMD /Q /C del /F /Q @PATH"
    cls
)

rem ******************************************************************************************
rem * If the current months _Complete folder exists, a complete backup has already been      *
rem * performed, so perform an incremental instead.                                          *
rem ******************************************************************************************

if exist "%BV%\%MONTH%_Completo" (
    echo.
    echo.
    echo  Performing incremental backup...
    echo.
    echo.
    mkdir "%BV%\%MONTH%_%DAY%_%TM%_Incrementale"
    set BLOG=%BV%\%MONTH%_%DAY%_%TM%_Incrementale_BackupLog.txt
    robocopy "C:\Cartella1" "%BV%\%MONTH%_%DAY%_%TM%_Incrementale\Cartella1" /B /E /M /R:0 /V /NP /TEE /XJ /LOG+:"%BV%\%MONTH%_%DAY%_%TM%_Incrementale_BackupLog_Cartella1.txt" /XD %EXC%
	robocopy "C:\Cartella2" "%BV%\%MONTH%_%DAY%_%TM%_Incrementale\Cartella2" /B /E /M /R:0 /V /NP /TEE /XJ /LOG+:"%BV%\%MONTH%_%DAY%_%TM%_Incrementale_BackupLog_Cartella2.txt" /XD %EXC%
) else (
    echo.
    echo.
    echo  Performing complete backup...
    echo.
    echo.
    set BLOG=%BV%\%MONTH%_Completo_BackupLog.txt
    robocopy "C:\Cartella1" "%BV%\%MONTH%_Completo\Cartella1" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"%BV%\%MONTH%_Completo_BackupLog_Cartella1.txt" /XD %EXC%
    robocopy "C:\Cartella1" "%BV%\%MONTH%_Completo\Cartella1" /B /E /R:0 /V /NP /TEE /XJ /LOG+:"%BV%\%MONTH%_Completo_BackupLog_Cartella1.txt" /XD %EXC%
	
	robocopy "C:\Cartella2" "%BV%\%MONTH%_Completo\Cartella2" /B /E /R:0 /CREATE /NP /TEE /XJ /LOG+:"%BV%\%MONTH%_Completo_BackupLog_Cartella2.txt" /XD %EXC%
    robocopy "C:\Cartella2" "%BV%\%MONTH%_Completo\Cartella2" /B /E /R:0 /V /NP /TEE /XJ /LOG+:"%BV%\%MONTH%_Completo_BackupLog_Cartella2.txt" /XD %EXC%
attrib -A "C:\Cartella1\*.*" /S
attrib -A "C:\Cartella2\*.*" /S
    )
)

:end

exit

In allegato, lo script di esempio:
Script Backup Incrementale