Ergebnis 1 bis 7 von 7
  1. #1
    Dreami Dreami ist offline
    Avatar von Dreami

    Mein Backupbatchscript

    Tach

    Wollte ursprünglich nur ein Skript schreiben um meine Schuldaten vom Laptop auf den Server in meiner Ausbildungsfirma zu kopieren. Nur weiss man nicht immer wann man fertig ist, wer machmal codet, kennt das. Nun habe ich es soweit erweitert, dass es für alle möglichen Umgebungen anpassbar ist.

    Vor dem eigentlichen Backup wird ein Archiv des letzten Backups erstellt, falls man einen Fehler beim Backup macht. Zudem wird bei jedem Backup ein Logeintrag in einer Textdatei generiert. Dies funktioniert auch auf Netzlaufwerken (!) und bei Ordnern mit Leerzeichen
    Genaueres findet ihr im README des Skripts. Ich hoffe ihr verzeiht es mir, dass es auf englisch verfasst wurde, ich möchte es portabel halten

    Das Script findet ihr hier als Code zum kopieren oder als Anhang.

    Code:
    @Echo off
    echo Backup started
    rem ***********************************************************************************************
    rem README
    
    rem Version: 1.0.0.0
    rem Last Update: 16.6.2011
    
    rem Purpose
    rem This script is for backing up data from one directory to another and keeping an archive of the last backup. It creates a logfile too, stating the last backup time. It even works on network shares, if you've got it mapped. Spaces in directory names are also supported.
    
    rem How it works (basic)
    rem It clears the archive, copies your last backup to the archive, clears the new backup directory and uploads your new data to the backup directory.
    
    rem How it works (technically)
    rem Because there is no easy way to clear a directory, it deletes it and creates it again. This leads to the following procedure:
    rem Set variables (explained later), go to the folder where all commands are going on from then, delete the archive directory and create it again, copy the content from the last backup to the new one, delete and create the backup directory, upload the backup and write a logfile.
    
    rem Setup
    rem For the following example we are assuming that you want to backup your data from F:\Data Script\ to Y:\Data Script\. The latest backup will be in Y:\Data Script\Backup\ , the archive in Y:\Data Script\Archive . The logfile shall be called log.txt. In this logfile, it shall be stated: "Last backup: DD.MM.YYYY HH:MM:SS.MS"
    rem 1. Create the directory Backup and Archive
    rem 2. Set variables as stated below
    rem 3. Close all open applications that are using  data that you want to backup, for example Outlook if you want to backup your email
    rem 4. Execute this script and watch for error messages.
    
    rem Please keep in mind to NOT add or delete any character if you don't know what you're really doing. For examples, don't delete the quotes or don't add a backslash (\) or anything like that in those paths.
    rem If you want to change other parts of the script, you may have to dig into the script.
    
    rem sourcedir = your source directory; "F:\Data Script"
    rem targetdir = your target directory; "Y:\Data Script"
    rem backupdir = your backup data directory; "Backup"
    rem archivedir = your archive data directory; "Archive"
    rem logfile = your logfile filename; log.txt
    rem lastexecution = to change what shall be stated before the date and time; Last backup: 
    
    rem If you're curious about what those switches mean:
    rem rmdir /S /Q = all subfolders and files; do not ask again
    rem xcopy /E /Q = all subfolders (including empty ones) and files; do not show files
    
    rem Known Issues
    rem - If you leave either the latest or the archive directory open, it may crash or state "Access denied". This is due to the way the script works, with not actually clearing but deleting and creating again these directories
    rem ***********************************************************************************************
    
    rem Set up variables
    rem Files and folders
    set sourcedir="F:\Data Script"
    set targetdir="Y:\Data Script"
    set backupdir="Backup"
    set archivedir="Archive"
    set logfile=log.txt
    rem Wording
    set lastexecution=Last backup:
    
    rem Go to folder
    pushd %targetdir%%
    
    rem Delete archivedir and create again
    rmdir /S /Q %archivedir%
    mkdir %archivedir%
    echo Folder %archivedir% cleared
    
    rem Copy content from backupdir to archivedir
    xcopy /E /Q %backupdir% %archivedir%
    echo Moved data to %archivedir%
    
    rem Delete backupdir and create again
    rmdir /S /Q %backupdir%
    mkdir %backupdir%
    echo Folder %backupdir% cleared
    
    rem Upload data
    xcopy /E /Q %sourcedir% %backupdir%
    echo Data uploaded
    echo Backup finished
    
    rem Log entry
    echo %lastexecution% %date% %time% >> %logfile%
    
    rem Pause to see output
    pause
    Ich nehme auch gerne Verbesserungsvorschläge und Featurerequests auf
    Angehängte Dateien Angehängte Dateien

  2. Anzeige

    Mein Backupbatchscript

    Schau dir mal diesen Bereich an. Dort ist für jeden was dabei!
  3. #2
    HardAndSoft HardAndSoft ist offline
    Avatar von HardAndSoft

    AW: Mein Backupbatchscript

    Hi @Dreami,

    ein sehr schönes und sehr sauberes Skript. So etwas kann z.B. zu Hause gut dazu genutzt werden, das Verzeichnis "Eigene Dateien" einmal täglich auf ein Netzlaufwerk zu sichern.

    Aus meiner Sicht ließe sich ein Punkt allerdings noch verbessern:

    Dein Skript geht davon aus, dass alles funktioniert. Das stimmt zwar meistens, aber leider nicht immer
    Es braucht nur eine Datei in Quell- oder Zielverzeichnis noch im Zugriff zu sein, und schon haben wir einen undefinierten Backup-Zustand.

    Ich selbst habe mir in Skripts angewöhnt, jeden einzelnen DEL, COPY, MKDIR und RMDIR mit einem abschließenden
    IF EXISTS oder IF NOT EXISTS
    zu überprüfen. Daran schließt sich dann ein Sprungbefehl an, der jeweils zu einem eigenen Label führt, und genau sagt, an welcher Stelle etwas schief gelaufen ist.
    Als Fehlerroutine kann man z.B. eine Datei FEHLER!!! auf dem Desktop erzeugen lassen, oder mit Zusatzsoftware sich selbst eine Mail schreiben.

    Ist ein ziemlicher Aufwand, aber man kann das Skript dann bedienerlos laufen lassen und merkt trotzdem sofort, wenn etwas nicht geklappt hat.

    Viel Spaß !

  4. #3
    Dreami Dreami ist offline
    Avatar von Dreami

    AW: Mein Backupbatchscript

    Version 1.1.0 erschienen:

    Danke vielmal für das Feedback, habs eben noch eingebaut Evtl. lasse ich das Skript später auch mit 'nem Errorcode beenden, aber muss mir dazu erst noch die Auswirkungen ansehen
    Zudem habe ich den Code noch etwas umgeschrieben, deswegen gibts bereits einen Minor-Sprung.

    Vorerst gibts Fehlererkennung darauf, ob alle angegebenen Verzeichnisse vorhanden sind. Zudem muss ich als Systemvoraussetzung jetzt ab XP setzen, weil anscheinend die Verzeichniserkennung auf diese Art erst ab XP funktioniert, kanns aber nicht prüfen.

    Code:
    @Echo off
    echo Backup started
    rem ***********************************************************************************************
    rem README
    
    rem Version: 1.1.0
    rem Last Update: 17.6.2011
    
    rem System requirements
    rem OS: Windows XP, Windows Vista, Windows 7
    
    rem Purpose
    rem This script is for backing up data from one directory to another and keeping an archive of the last backup. It creates a logfile too, stating the last backup time or an error. Please note, if an error occurs, it will be created at the location of this script. It even works on network shares, if you've got it mapped. Spaces in directory names are also supported.
    
    rem How it works (basic)
    rem It clears the archive, copies your last backup to the archive, clears the new backup directory and uploads your new data to the backup directory.
    
    rem How it works (technically)
    rem Because there is no easy way to clear a directory, it deletes it and creates it again. This leads to the following procedure:
    rem Set variables (explained later), go to the folder where all commands are going on from then, delete the archive directory and create it again, copy the content from the last backup to the new one, delete and create the backup directory, upload the backup and write a logfile.
    
    rem Setup
    rem For the following example we are assuming that you want to backup your data from F:\Data Script\ to Y:\Data Script\. The latest backup will be in Y:\Data Script\Backup\ , the archive in Y:\Data Script\Archive . The logfile shall be called log.txt. In this logfile, it shall be stated: "Last backup: DD.MM.YYYY HH:MM:SS.MS"
    rem 1. Create the directory Backup and Archive
    rem 2. Set variables as stated below
    rem 3. Close all open applications that are using  data that you want to backup, for example Outlook if you want to backup your email
    rem 4. Execute this script and watch for error messages.
    
    rem Please keep in mind to NOT add or delete any character if you don't know what you're really doing. For examples, don't delete the quotes or don't add a backslash (\) or anything like that in those paths.
    rem If you want to change other parts of the script, you may have to dig into the script.
    
    rem sourcedir = your source directory; "F:\Data Script"
    rem targetdir = your target directory; "Y:\Data Script"
    rem backupdir = your backup data directory; "Backup"
    rem archivedir = your archive data directory; "Archive"
    rem logfile = your logfile filename; log.txt
    rem lastexecution = to change what shall be stated before the date and time; Last backup: 
    
    rem If you're curious about what those switches mean:
    rem rmdir /S /Q = all subfolders and files; do not ask again
    rem xcopy /E /Q = all subfolders (including empty ones) and files; do not show files
    
    rem Developer Notes
    rem Error checking
    rem nqX = Variable X without quotes for path composing
    
    rem Error levels of %errorlevel%
    rem 0: No error
    rem 1: Paths set in variable are not valid
    
    rem Known Issues
    rem - If you leave either the latest or the archive directory open, it may crash or state "Access denied". This is due to the way the script works, with not actually clearing but deleting and creating again these directories
    rem ***********************************************************************************************
    
    rem Set up variables
    rem Files and folders
    set sourcedir="F:\Data Script"
    set targetdir="Y:\Data Script"
    set backupdir="Backup"
    set archivedir="Archive"
    set logfile=log.txt
    rem Wording
    set lastexecution=Last backup:
    rem Do not change the following oness
    set errorlevel=0
    
    rem Error checking
    rem Absolute paths
    if not exist %sourcedir% set errorlevel=1 && goto error
    if not exist %targetdir% set errorlevel=1 && goto error
    rem Relative paths
    set nqtargetdir=%targetdir:"=%
    set nqbackupdir=%backupdir:"=%
    set nqarchivedir=%archivedir:"=%
    if not exist "%nqtargetdir%\%nqbackupdir%" set errorlevel=1 && goto error
    if not exist "%nqtargetdir%\%nqarchivedir%" set errorlevel=1 && goto error
    
    rem Go to folder
    pushd %targetdir%%
    
    rem Delete archivedir and create again
    rmdir /S /Q %archivedir%
    mkdir %archivedir%
    echo Folder %archivedir% cleared
    
    rem Copy content from backupdir to archivedir
    xcopy /E /Q %backupdir% %archivedir%
    echo Copied data to %archivedir%
    
    rem Delete backupdir and create again
    rmdir /S /Q %backupdir%
    mkdir %backupdir%
    echo Folder %backupdir% cleared
    
    rem Upload data
    xcopy /E /Q %sourcedir% %backupdir%
    echo Data uploaded
    echo Backup finished
    
    rem Log entry
    echo %lastexecution% %date% %time% >> %logfile%
    
    :error
    if %errorlevel% NEQ 0 echo An error has occurred
    if %errorlevel% EQU 1 echo Error occurred: Check your directories and its variables: %date% %time% >> %logfile%
    
    rem Pause to see output
    pause
    Über Feedback würde ich mich freuen
    Angehängte Dateien Angehängte Dateien

  5. #4
    Dagobert Duck Dagobert Duck ist offline
    Avatar von Dagobert Duck

    AW: Mein Backupbatchscript

    Wow, das sieht echt Klasse aus!!

    Habe selber noch nie mit Skripten gearbeitet, wieviel Zeit spare ich denn da?

  6. #5
    Dreami Dreami ist offline
    Avatar von Dreami

    AW: Mein Backupbatchscript

    Naja, mit Skripten kannst du einfach wiederkehrende Aufgaben relativ weit automatisieren. An meiner Berufsschule werden z.B. alle Namen von einer Datei (wahrscheinlich 'n CSV oder ähnliches) von einem Powershellskript eingelesen und erfasst fürs nächste Schuljahr, kein manuelles Eintippen nötig.
    Du musst aber bedenken, dass du ein vielfaches der benötigten Zeit des eigentlichen Auftrags für die Entwicklung eines solchen Skripts benötigst. Für dieses Skript habe ich etwa insgesamt 8h gebraucht, aber nur, weil ich es zuerst ganz einfach gemacht hab und es nun auch variabel gestaltbar ist, inkl. Dokumentation Das eigentliche kopieren würde etwa ~1 Minute dauern, aber es ist viel bequemer so

  7. #6
    Werwaffel Werwaffel ist offline
    Avatar von Werwaffel

    AW: Mein Backupbatchscript

    Sehr schönes Script!

    Wenn ich Batch wieder brauche, werde ich da wohl wieder einsteigen. Bin nicht mehr auf dem Laufenden. Ist aber denke ich auch nicht sehr schwer, die Kenntnisse zu erfrischen.

  8. #7
    Dreami Dreami ist offline
    Avatar von Dreami

    AW: Mein Backupbatchscript

    Ich habe auch bewusst auf Batch gesetzt, da wir in der Firma Softwareverteilung machen und diese nur mit Batchbefehlen arbeiten kann. Mit Batch hatte ich bisher immer etwas Probleme und es war für mich auch eine Sprache, bei der ich nie mit Sicherheit sagen konnte ob etwas funktioniert oder nicht, da ich die Funktionsweise nicht wirklich kapiert habe, nun funktiniert es aber recht gut

Ähnliche Themen


  1. Darf mein Chef mein Praktikum annulieren?: Hallo alle zusammen! Vor ca. einem Monat habe ich ein 4-wöchiges (offiziell 5 wöchiges) Praktikum bei einem Designer gemacht. Er fuhr in den...

  2. Mein Headset und mein Skype scheinen sich nicht zu mögen: Hi Leute, ich hab folgendes Problem. Ich benutze ein MICROSOFT Headset Life Chat LX-3000 und bin auch voll zufrieden. Nur habe ich das Problem,...

  3. Wieviel ist mein Netbook und mein Desktop PC wert ?: Hallo, ich würde gerne wissen wieviel meine beiden Geräte wert sind. Hier die Technischen Daten : Netbook : Acer Aspire One 531h ZG8 Intel...

  4. Mein Laptop erkennt mein iPod nicht mehr!!! Hilfe!: Hi ihr, Ich hab gestern iTunes deinstalliert (auch “Bonjour“) und iTunes dann neu installiert. Jetzt erkennt weder mein Laptop (Windows XP) noch...

  5. Mein Pc erkennt mein Mikro nicht: Also es ist zum durchdrehen bin gerade echt sauer weil mein PC mein Mikro nicht erkennt ich habe das Vista Betriebssystem habe ein Phillps Mikro :D