Ergebnis 1 bis 7 von 7
Thema: Mein Backupbatchscript
-
17.06.2011, 19:36 #1Dreami
Mein Backupbatchscript
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
-
-
17.06.2011, 20:08 #2HardAndSoft
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ß !
-
17.06.2011, 22:23 #3Dreami
AW: Mein Backupbatchscript
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
-
18.06.2011, 11:45 #4Dagobert Duck
AW: Mein Backupbatchscript
Wow, das sieht echt Klasse aus!!
Habe selber noch nie mit Skripten gearbeitet, wieviel Zeit spare ich denn da?
-
18.06.2011, 12:23 #5Dreami
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
-
18.06.2011, 23:10 #6Werwaffel
AW: Mein Backupbatchscript
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.
-
18.06.2011, 23:31 #7Dreami
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
-
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... -
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,... -
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... -
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... -
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
GX und die erste Season waren die einzigen, die ich auch wirklich aktiv und komplett verfolgt habe. :D Deshalb freu ich mich umso mehr, dass es von...
Der Yu-Gi-Oh! Anime & TCG-Thread