Batch Batch Backup - Mir War Langweilig

Chr0n

Lieutenant
Registriert
Jan. 2007
Beiträge
528
So wie ich schon oben geschrieben habe war mir etwas langweilig.
Also hab ich einfach mal ein kleines Backup-Programm geschrieben.

Was kann es?
Ein Backup von euren Daten machen ;P
Alte Backups löschen.

Aufruf:
Code:
backup.cmd INPUT OUTPUT [Log] [Anzahl der Backups, die in Output bleiben sollen]
zB:
Code:
backup.cmd "%allusersprofile%\desktop\daten" "\\192.168.1.5\MyBackups" "C:\backup_log.txt" 2

Würde folgendes bewirken:
Alle Ordner, Daten und Unterordner von "C:\Dokumente und Einstellungen\All Users\Desktop" werden nach "\\192.168.1.5\MyBackups\Datum_Zeit" kopiert.
Zusätzlich wird auf C:\ ein Log-File angelegt.
Wenn in MyBackups nach dem Backup mehr als 2 Ordner enthalten sind, werden die älteren Ordner gelöscht.

Vielleicht füge ich irgendwann nochmal SFTP und FTP Support ein, zZ ist dies nur durch mounten des FTPs mit SftpDrive möglich (dann kann man einfach den FTP auf Z:\ mounten und Z:\ als Output angeben).

Ein Beispiel des Log Files:
Code:
		2008-08-17_11-08 
------------------------------------------------ 
C:\Dokumente und Einstellungen\All Users\desktop\iTunes.lnk
C:\Dokumente und Einstellungen\All Users\desktop\Mozilla Firefox.lnk
C:\Dokumente und Einstellungen\All Users\desktop\Mozilla Thunderbird.lnk
C:\Dokumente und Einstellungen\All Users\desktop\Relakks.lnk
4 Datei(en) kopiert
 
Old Backups Deleted Successfully 
 
Backup was Successful 
------------------------------------------------


So und das Programm an sich:
Code:
:: Backup Important Data - (C) Chr0n - 2008-08-14 ::

@echo off
if %1!==! goto nop
if %2!==! goto nop

:: Variables To Be Used Further On ::
set INPUT=%1
set OUTPUT=%2
set LOG=%3"
if %4!==! (
	set COUNT=999
) ELSE ( 
	set COUNT=%4 
)

:: Change Date and Time Format ::
FOR /f "tokens=1,2,3 delims=. " %%i in ('Date /t') do set CDATE=%%k-%%j-%%i
FOR /F "tokens=1,2,3 delims=/: " %%a in ('Time /T') do set CTIME=%%a-%%b%%c

echo 		%CDATE%_%CTIME% >>%LOG%
echo ------------------------------------------------ >>%LOG%

if NOT EXIST %OUTPUT%\%CDATE%_%CTIME% (
	mkdir %OUTPUT%\%CDATE%_%CTIME%
	if NOT EXIST %OUTPUT%\%CDATE%_%CTIME% (
		echo Output Directory Could Not Be Created >>%LOG%
		goto error
	)
)
if EXIST %INPUT% (
	:: Copy %INPUT% to %OUTPUT%\DATE_TIME; echo on screen and in log ::
	xcopy /e /h /i /k /v /y %INPUT% "%OUTPUT%\%CDATE%_%CTIME%" | CSCRIPT Tee.vbs -a %LOG%
	if not errorlevel 0 goto error
) ELSE (
	echo Input Directory Could Not Be Found >>%LOG%
	goto error
)
:: Delete Old Backups (Only Keep %COUNT% Number Of Backups) ::
for /f "skip=%COUNT%" %%a in ('dir %OUTPUT% /b /a:d /o:-d 2^>NUL') do (
	rmdir /s /q "%OUTPUT%\%%a"
	if not errorlevel 0 (
		echo. >>%LOG%
		echo Old Backups Could Not Be Deleted >>%LOG%
		echo.
		echo Old Backups Could Not Be Deleted
	) ELSE (
		echo. >>%LOG%
		echo Old Backups Deleted Successfully >>%LOG%
		echo.
		echo Old Backups Deleted Successfully
	)
)
goto ende

:error
echo. >>%LOG%
echo Backup Failed >>%LOG%
echo.
echo Backup Failed
echo ------------------------------------------------ >>%LOG%
echo. >>%LOG%
echo. >>%LOG%
exit /b 1

:ende
echo. >>%LOG%
echo Backup was Successful >>%LOG%
echo.
echo Backup was Successful
echo ------------------------------------------------ >>%LOG%
echo. >>%LOG%
echo. >>%LOG%
exit /b 0

:nop
echo Unzulässige Parameteranzahl
echo backup.cmd Input Output [Log] [Max Backups In Destination]
exit /b 2


Ah und bevor ichs vergesse, damit das Tool funktioniert braucht ihr noch die Tee.vbs - die ist dafür zuständig, dass XCopy auf der Konsole und in der Log ausgegeben werden - wollt ihr das nicht, könnt ihr den Eintrag "| CSCRIPT Tee.vbs -a %LOG%" einfach in ">>%LOG%" umändern, dann wirds nur noch in LOG.txt gespeichert.

// ANHANG NICHT MEHR GANZ AKTUELL
// Nur die Tee.vbs vom Anhang und das Script von hier nehmen
 

Anhänge

  • Chr0n_Backup.zip
    2,2 KB · Aufrufe: 258
Zuletzt bearbeitet:
Man kann antworten, dass man auch einfach robocopy nehmen könnte. ;)
 
Zurück
Oben