Here is an easy AutoIt script that I use for basic users who need to automaticaly backup their datas to external drive. It backups current user Desktop, Downloads, Documents, Music, Pictures, Videos and Thunderbird folders.
#include <Date.au3> #include <MsgBoxConstants.au3> ; Role : Backup User and Thunderbird profile to Z:\BACKUP\YYYY ; Author : http://shebangthedolphins.net/ ; Instructions : ; - Allocate backup drive to Z: ; - use Aut2Exe to convert script to .exe file ; 1.0 first version ; 1.1 Create a YYYY folder to destination, automaticaly use UserName path ;separate hour and date ;source : https://www.autoitscript.com/autoit3/docs/libfunctions/_DateTimeSplit.htm Local $aMyDate, $aMyTime _DateTimeSplit( _NowCalc(), $aMyDate, $aMyTime) ;Date variable which will include current date Local $Date ;if month is less than 10 we add 0 in front of the value If $aMyDate[2] < 10 Then $aMyDate[2] = "0" & $aMyDate[2] EndIf ;if days are less than 10 we add 0 in front of the value If $aMyDate[3] < 10 Then $aMyDate[3] = "0" & $aMyDate[3] EndIf ;We concatenate variables in order to have date value with this format : YYYY.MM.JJ ;$Date = $aMyDate[1] & "." & $aMyDate[2] & "." & $aMyDate[3] ;We only select YYYY (current year) value $Date = $aMyDate[1] ;Get all drives letters ;https://www.autoitscript.com/autoit3/docs/functions/DriveGetDrive.htm Local $aArray = DriveGetDrive($DT_ALL) ;Folders table which contain all folders we want to save Local $SFolders[6] $SFolders[0] = "Desktop" $SFolders[1] = "Downloads" $SFolders[2] = "Documents" $SFolders[3] = "Music" $SFolders[4] = "Pictures" $SFolders[5] = "Videos" For $i = 1 To $aArray[0] ;Backup only if Z: drive is found If StringUpper($aArray[$i]) == "Z:" Then For $element in $SFolders RunWait(@ComSpec & " /c " & 'robocopy "C:\Users\' & @UserName & '\' & $element & '" Z:\BACKUP\' & $Date & '\' & $element & ' /MIR /R:2 /W:2 /X /V /NP /LOG:Z:\BACKUP\log_' & $element & '.txt /TEE', "", @SW_MAXIMIZE) Next ;Thunderbird Backup RunWait(@ComSpec & " /c " & 'robocopy "C:\Users\' & @UserName & '\AppData\Local\Thunderbird" Z:\BACKUP\' & $Date & '\Thunderbird\Local /MIR /R:2 /W:2r /X /V /NP /LOG:Z:\BACKUP\thunderbird_Local.txt /TEE', "", @SW_MAXIMIZE) RunWait(@ComSpec & " /c " & 'robocopy "C:\Users\' & @UserName & '\AppData\Roaming\Thunderbird" Z:\BACKUP\' & $Date & '\Thunderbird\Roaming /MIR /R:2 /W:2r /X /V /NP /LOG:Z:\BACKUP\thunderbird_Roaming.txt /TEE', "", @SW_MAXIMIZE) EndIf Next
I've updated the script. It will now create a YYYY.MM_HOSTNAME destination folder and will get the Desktop, Downloads, Documents, Music, Pictures, Videos paths from Windows Registry (in case the location has been changed).
#include <Date.au3> #include <MsgBoxConstants.au3> ; Role : Backup User and Thunderbird profile to Z:\BACKUP\YYYY.MM_HOSTNAME ; Author : http://shebangthedolphins.net/ ; Instructions : ; - Allocate backup drive to Z: ; - use Aut2Exe to convert script to .exe file ; 1.0 first version ; 1.1 Create a YYYY folder to destination, automaticaly use UserName path ; 1.2 Create a YYYY.MM_HOSTNAME folder to Z:\BACKUP, automaticaly get User Profile path from registry ;separate hour and date ;source : https://www.autoitscript.com/autoit3/docs/libfunctions/_DateTimeSplit.htm Local $aMyDate, $aMyTime _DateTimeSplit( _NowCalc(), $aMyDate, $aMyTime) ;Date variable which will include current date Local $Date ;if month is less than 10 we add 0 in front of the value If $aMyDate[2] < 10 Then $aMyDate[2] = "0" & $aMyDate[2] EndIf ;if days are less than 10 we add 0 in front of the value If $aMyDate[3] < 10 Then $aMyDate[3] = "0" & $aMyDate[3] EndIf ;We concatenate variables in order to have date value with this format : YYYY.MM.JJ ;$Date = $aMyDate[1] & "." & $aMyDate[2] & "." & $aMyDate[3] ;We only select YYYY.MM (current year and current month) value $Date = $aMyDate[1] & "." & $aMyDate[2] ;We only select YYYY (current year) value ;$Date = $aMyDate[1] ;Get all drives letters ;https://www.autoitscript.com/autoit3/docs/functions/DriveGetDrive.htm Local $aArray = DriveGetDrive($DT_ALL) ;Folders table which contain all folders we want to save Local $SFolders[6] $SFolders[0] = "Desktop" $SFolders[1] = "{374DE290-123F-4565-9164-39C4925E467B}" ;For Downloads Folder, see https://www.autoitscript.com/forum/topic/187782-downloads-folder-macro/ $SFolders[2] = "Personal" $SFolders[3] = "My Music" $SFolders[4] = "My Pictures" $SFolders[5] = "My Video" For $i = 1 To $aArray[0] ;Backup only if Z: drive is found If StringUpper($aArray[$i]) == "Z:" Then For $element in $SFolders Local $sFilePath = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", $element) $sFilePath = StringReplace($sFilePath, "%USERPROFILE%", @UserProfileDir) ;Local $Folder = StringReplace($sFilePath, @UserProfileDir & "\", "") ; See https://www.autoitscript.com/autoit3/docs/macros/Directory.htm for macroreference variables Local $Folder = StringRegExpReplace($sFilePath, '.*\\', "") ConsoleWrite ( $sFilePath & " " & $Folder & " " ) ;RunWait(@ComSpec & " /c " & 'robocopy "' & $sFilePath & '" Z:\BACKUP\' & $Date & '_' & @ComputerName & '\' & $Folder & ' /MIR /R:2 /W:2 /X /V /NP /LOG:Z:\BACKUP\log_' & $Folder & '.txt /TEE', "", @SW_MAXIMIZE) RunWait(@ComSpec & " /c " & 'robocopy "' & $sFilePath & '" "Z:\BACKUP\' & $Date & '_' & @ComputerName & '\' & $Folder & '" /MIR /R:2 /W:2 /X /V /NP /LOG:"Z:\BACKUP\log_' & $Folder & '.txt" /TEE', "", @SW_MAXIMIZE) Next ;Thunderbird Backup RunWait(@ComSpec & " /c " & 'robocopy "C:\Users\' & @UserName & '\AppData\Local\Thunderbird" Z:\BACKUP\' & $Date & '_' & @ComputerName & '\Thunderbird\Local /MIR /R:2 /W:2r /X /V /NP /LOG:Z:\BACKUP\thunderbird_Local.txt /TEE', "", @SW_MAXIMIZE) RunWait(@ComSpec & " /c " & 'robocopy "C:\Users\' & @UserName & '\AppData\Roaming\Thunderbird" Z:\BACKUP\' & $Date & '_' & @ComputerName & '\Thunderbird\Roaming /MIR /R:2 /W:2r /X /V /NP /LOG:Z:\BACKUP\thunderbird_Roaming.txt /TEE', "", @SW_MAXIMIZE) EndIf Next
Once again, I've updated the script. We don't have to specify Z: drive letter anymore. The script will automatically search for a BACKUP label drive and get the associate letter.
#include <Date.au3> #include <AutoItConstants.au3> #include <MsgBoxConstants.au3> ; Role : Backup User and Thunderbird profile to Z:\BACKUP\YYYY.MM_HOSTNAME ; Author : http://shebangthedolphins.net/ ; Instructions : ; - Allocate backup drive to Z: ; - use Aut2Exe to convert script to .exe file ; 1.0 first version ; 1.1 Create a YYYY folder to destination, automaticaly use UserName path ; 1.2 Create a YYYY.MM_HOSTNAME folder to Z:\BACKUP, automatically get User Profile path from registry ; 1.3 Backup automaticaly on the BACKUP label drive ;separate hour and date ;source : https://www.autoitscript.com/autoit3/docs/libfunctions/_DateTimeSplit.htm Local $aArray = DriveGetDrive($DT_ALL) ; https://www.autoitscript.com/autoit3/docs/functions/DriveGetDrive.htm Local $Drive ; drive letter with BACKUP label If @error Then ; An error occurred when retrieving the drives. MsgBox($MB_SYSTEMMODAL, "", "It appears an error occurred.") Exit 1 Else For $i = 1 To $aArray[0] Local $sLabel = DriveGetLabel(StringUpper($aArray[$i]) & "\") ; Find the volume label of the current drive. If (StringUpper($sLabel) == "BACKUP") Then $Drive = StringUpper($aArray[$i]) ;Drive variable : "Letter:" ExitLoop ;One find, exit loop EndIf Next if Not ($Drive) Then MsgBox($MB_SYSTEMMODAL, "", "No BACKUP disk found") Exit 1 EndIf EndIf ;separate hour and date ;source : https://www.autoitscript.com/autoit3/docs/libfunctions/_DateTimeSplit.htm Local $aMyDate, $aMyTime _DateTimeSplit( _NowCalc(), $aMyDate, $aMyTime) ;Date variable which will include current date Local $Date ;if month is less than 10 we add 0 in front of the value If $aMyDate[2] < 10 Then $aMyDate[2] = "0" & $aMyDate[2] EndIf ;if days are less than 10 we add 0 in front of the value If $aMyDate[3] < 10 Then $aMyDate[3] = "0" & $aMyDate[3] EndIf ;We concatenate variables in order to have date value with this format : YYYY.MM.JJ ;$Date = $aMyDate[1] & "." & $aMyDate[2] & "." & $aMyDate[3] ;We only select YYYY.MM (current year and current month) value $Date = $aMyDate[1] & "." & $aMyDate[2] ;We only select YYYY (current year) value ;$Date = $aMyDate[1] ;Get all drives letters ;https://www.autoitscript.com/autoit3/docs/functions/DriveGetDrive.htm ;Local $aArray = DriveGetDrive($DT_ALL) ;Folders table which contain all folders we want to save Local $SFolders[6] $SFolders[0] = "Desktop" $SFolders[1] = "{374DE290-123F-4565-9164-39C4925E467B}" ;For Downloads Folder, see https://www.autoitscript.com/forum/topic/187782-downloads-folder-macro/ $SFolders[2] = "Personal" $SFolders[3] = "My Music" $SFolders[4] = "My Pictures" $SFolders[5] = "My Video" For $element in $SFolders Local $sFilePath = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", $element) $sFilePath = StringReplace($sFilePath, "%USERPROFILE%", @UserProfileDir) ;Local $Folder = StringReplace($sFilePath, @UserProfileDir & "\", "") ; See https://www.autoitscript.com/autoit3/docs/macros/Directory.htm for macroreference variables Local $Folder = StringRegExpReplace($sFilePath, '.*\\', "") ConsoleWrite ( $sFilePath & " " & $Folder & " " ) RunWait(@ComSpec & " /c " & 'robocopy "' & $sFilePath & '" "' & $Drive & '\BACKUP\' & $Date & '_' & @ComputerName & '\' & $Folder & '" /MIR /R:2 /W:2 /X /V /NP /LOG:"' & $Drive & '\BACKUP\log_' & $Folder & '.txt" /TEE', "", @SW_MAXIMIZE) Next ;Sauvegarde de Thunderbird RunWait(@ComSpec & " /c " & 'robocopy "C:\Users\' & @UserName & '\AppData\Local\Thunderbird" ' & $Drive & '\BACKUP\' & $Date & '_' & @ComputerName & '\Thunderbird\Local /MIR /R:2 /W:2r /X /V /NP /LOG:' & $Drive & '\BACKUP\thunderbird_Local.txt /TEE', "", @SW_MAXIMIZE) RunWait(@ComSpec & " /c " & 'robocopy "C:\Users\' & @UserName & '\AppData\Roaming\Thunderbird" ' & $Drive & '\BACKUP\' & $Date & '_' & @ComputerName & '\Thunderbird\Roaming /MIR /R:2 /W:2r /X /V /NP /LOG:' & $Drive & '\BACKUP\thunderbird_Roaming.txt /TEE', "", @SW_MAXIMIZE)
Contact :