Sign in to follow this  
Followers 0
JohnOne

Nimps Folder Backup

1 post in this topic

#1 ·  Posted (edited)

"Nimps" is a regional slang word, which means easy or simple or basic and such.

I made a quick little script the other day to backup the visual studio project folder I was actively working on.

Thought I'd generalise it for use with the current active windows explorer folder.

When this script is running, and you hit "Ctrl and Shift and b", if a folder is open in windows explorer, it will copy the contents of it to your desired location ($GENERAL_BACKUP_FOLDER) including subfolders and its files and folders (so beware on deep directories)

If you have command line version of 7zip (7za.exe) you can choose to compress the folder rather than just copy it ($ZIP_FOLDER = True), or both I suppose.

Think that's all.

Reading the code should tell you anything else.

Oh, success or failure is indicated by a high or low frequency Beep().

#include <AutoItConstants.au3>
#include <String.au3>

HotKeySet("^+b", _Backup) ; ctrl and shift and b
HotKeySet("!+b", _Exit) ; alt and shift and b

Global Const $GENERAL_BACKUP_FOLDER = @ScriptDir & "Backup\"
Global Const $ZIP_FOLDER = False
Global Const $PATH_TO_7ZA = "D:\7za.exe"

While 3
    Sleep(300)
WEnd

; High frequency beep if successful
; Low frequency beep if failed
Func _Backup()
    Local $FOLDER_TO_BACKUP = ""
    Local $BACKUP_FOLDER = ""
    Local $CURRENT_BACKUP_FOLDER
    Local $WIN_TITLE = WinGetTitle("[Active]")
    Local $WIN_TEXT = WinGetText("[Active]")

    ; If text of window has no address, it is not a windows explorer
    If StringInStr($WIN_TEXT, "Address: ") Then
        Local $ACTIVE_EXPLORER_ADDRESS = _StringBetween($WIN_TEXT, "Address: ", @LF)
        If Not IsArray($ACTIVE_EXPLORER_ADDRESS) Then
            Beep(400, 150)
            Return @ScriptLineNumber
        EndIf
        $FOLDER_TO_BACKUP = $ACTIVE_EXPLORER_ADDRESS[0]
    Else
        Return MsgBox(0, "Info", "The active window is not explorer")
    EndIf

    ; Check to see if root drive is backup source
    If StringRight($FOLDER_TO_BACKUP, 2) = ":\" Then
        $Answer = MsgBox(4, "Warning", "You are about to attempt to backup a whole disk" & @CRLF & "Are you sure?")
        If $Answer <> 6 Then Return
    EndIf

    ; Date and time to append to backup zip file or folder
    $APPEND = "_" & @YEAR & "_" & @MON & "_" & @MDAY & "_" & @HOUR & "_" & @MIN & "_" & @SEC
    Local $CURRENT_BACKUP_FOLDER = $GENERAL_BACKUP_FOLDER & $WIN_TITLE & $APPEND

    ; Zip to backup folder and return, 7za.exe required
    If $ZIP_FOLDER Then

        ; Buile command for 7za
        $command = $PATH_TO_7ZA & ' a ' & '"' & $GENERAL_BACKUP_FOLDER & $WIN_TITLE & $APPEND & '"' & '.zip ' & '"' & $FOLDER_TO_BACKUP & '"'
        $pid = Run($command, "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
        While ProcessExists($pid)
            Sleep(10)
        WEnd
        $out = StdoutRead($pid)

        ; Indicate if successfull
        If StringInStr($out, "Everything is Ok") Then
            Beep(700, 200)
            Return
        EndIf
        Beep(400, 200)
        Return
    EndIf

    ; Copy folder and beep when complete, no 7zip needed.
    Local $RTN = DirCopy($FOLDER_TO_BACKUP, $CURRENT_BACKUP_FOLDER, 1) ? Beep(700, 500) : Beep(400, 500)

EndFunc   ;==>_Backup

Func _Exit()
    Exit
EndFunc   ;==>_Exit

 

Edited by JohnOne

AutoIt Absolute Beginners    Require a serial    Pause Script    Video Tutorials by Morthawt   ipify 

Monkey's are, like, natures humans.

Share this post


Link to post
Share on other sites



Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • Vivi
      By Vivi
      hey guys,
       
      is there a way to post into the "Usenet" with autoit ?
       
      I didn't found any resources about it online.
    • Wicked_Caty
      By Wicked_Caty
      I wanted to have a few lines that copy the whole registry into a file. I know that there is RegRead, but I don't want to type every single key into my code...
      Any way of doing this easily? Filetype doesn't matter, as long as it isn't encrypted. A batch or exe would be okay, if it's in the same location on every PC. Doing this without admin permissions would be awesome too
      Thanks
    • wakillon
      By wakillon
      TinyBackupBox : Do a Backup of folders you want to a local/external drive/directory by using Robocopy.

      A Big Thank to Yashield for TVExplorer.au3 and WinApiEx.au3

      Includes needed : >TVExplorer.au3 and >WinApiEx.au3



      * Left Treeview :

      Check all folders Checkboxes you want to backup.
      Hold Shift key when clicking a first child Checkbox will check all other child Checkboxes.
      A right click on a parent item will uncheck all his child Checkboxes.

      * Right Treeview :

      A left click for select Backup Directory.
      A right click menu on an item for create a new sub-folder which you can give the name you want.
      This new sub-folder will be created and added as child item of the item you have right clicked.

      * Start Button :

      A Click on Start Button will start backup normally.
      Hold Shift key when clicking it will start backup on Idle Mode.
      Idle Mode is used for start or resume backup after a period of user inactivity (that you can set by tray menu)
      and will pause current backup if not idle.

      * Stop Button :

      A click on Stop Button will Pause backup, and any changes will affect the backup when resume it.
      You can resume a current backup by Re-clicking Start Button.
      Hold Shift key when clicking Stop Button will totally Cancel current backup.
      In Idle mode Stop Button is inactive until you Hold Shift key and click for Cancel current backup.

      * Refresh Button :

      A Click will refresh both treeviews and set them to the previous selections you have done.
      Hold Shift key when clicking it will refresh both treeview and set them to the root.

      * Tray Menu :

      By Default Robocopy copy only new files,
      so i add the possibility to
      _ delete previous existing dir.
      _ delete destination files and dirs that no longer exists in source.
      _ Preserve all Attributes.
      _ Show Robocopy Console window.
      _ Set Idle Time Delay.
      _ Open Backup Dir.

      Update of 2011-12-21
      Previous downloads : 103
       
      source and executable are available in the Download Section

      minimalist but handy !
      Hope you like it !

      And do not forget to create backup periodically !
    • wakillon
      By wakillon
      Do a backup of a folders list
    • Xandy
      By Xandy
      WARNING: I never tried this on a root directory, I should probably write a fix for that case. EX: There is no C:\..\
      I don't know how many of these there are on this forum and I know Tidy is real nice for making backups.
      I have a few dislikes relying on the Tidy backup:
      1 I'm not crazy about the backup folder it creates in project folder.
      2. If no Tidy edits are performed script is not backed up on Tidy.  I can't rely on that when I request a backup.
      3. If I want to backup a select group of files without backing up the entire project folder, it is somewhat tedious to select each file and Tidy.
       
      Now this is just a very simple script that I felt I could use to simplify backing up my project.
      I'm not asking you to code it for me, but I welcome feedback.  If you think you can make it better or know of something better please share.
      I know of Github it's overkill for me, I'm not comfortable, and I won't use it as much as I need to.
       
      So here it is:
      You place it in the source folder, open it in Scite.
      Change: Global $gBackup_dir_path = "..\Backup\" to wherever you want you backup folder Path to be.
      in the main() add some backup("file_name") calls remember to remove file extension.
      and it should make a new backup file for each backup("file_name") every time you run the script.
      Test it out make sure it's working and you're good to go.
       
      #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.14.2 Author: myName Script Function: To copy files to a backup folder. #ce ---------------------------------------------------------------------------- #include <File.au3> Global $gBackup_dir_path = "..\Backup\" ; Todo ; Add notes, options notes in file name main() func main() ; File list remember to remove extentions from file_name ; or add file extention as second parameter backup("Map_Editor") backup("DW_Server") EndFunc Func backup($spFile_name, $spFile_ext = ".au3") Local $error = 0 Local $iFile_num = 0 ; Make source file path Local $sFile_path_source = $spFile_name & $spFile_ext Local $sFile_path_dest = "" ; Sample the contents of the backup directory before creating a file there Local $aFile = _FileListToArray($gBackup_dir_path, $spFile_name&"*"&$spFile_ext, $FLTA_FILES) $error = @error If $error = 0 Then $iFile_num = $aFile[0] EndIf out("Found: " & $iFile_num & " files named: " & $spFile_name) Do ; Incroment file_num to find available file_name $iFile_num += 1 ; Path to Write File Copy $sFile_path_dest = $gBackup_dir_path & $spFile_name & "_" & $iFile_num & $spFile_ext ; Refuse to Overwrite File If FileExists($sFile_path_dest) = 0 Then ExitLoop EndIf ; Am I right? Sleep(30) Until 0 ; Create the file FileCopy($sFile_path_source, $sFile_path_dest, $FC_CREATEPATH) $error = @error If $error Then out("FileCopy() error: " & $error) out("sFile_path_source: " & $sFile_path_source & " sFile_path_dest: " & $sFile_path_dest) EndFunc ;==>backup Func out($output = "", $user = 0);debug tool ConsoleWrite(@CRLF & $output);to console new line, value of $output EndFunc ;==>out Backup_Script.au3
      The script isn't authorized to overwrite files, and tries to create the next number of file_name available.
      The 'p' in my variable names stands for parameter.