CMD Backupscript erstellen nach Vorgabe?
Hallo Leute,
ich brÀuchte eure Hilfe, und zwar hab ich diesen Auftrag.
- einen Ordner mit Testdateien erstellen
z.B.: C:\users\Test\desktop\Test\Testordner
- das Script soll jeden Tag ausgefĂŒhrt werden
- das Script soll beim AusfĂŒhren den Ordner in einen Backupordner kopieren und dort nach dem Datum und der Uhrzeit vom Backup benennen
z.B.: in "C:\users\Test\desktop\Test" soll dann ein Backupordner namens "Testordner_03.08.2022_12:30" erstellt werden
- das Script soll am Ende prĂŒfen, wie viele Backups es gibt und wenn es mehr als 3 Backups gibt, das ĂLTESTE Backup löschen
z.B.:
Testordner_01.08.2022_12:30
Testordner_02.08.2022_12:30
Testordner_03.08.2022_12:30
Testordner_04.08.2022_12:30
und es wird der Ordner "Testordner_01.08.2022_12:30" gelöscht.
wie kann ich das am besten umsetzen ?
hat jemand zufÀllig ein Script wo genau das macht ?
danke FĂŒr eure Hilfe im vorraus.
2 Antworten
color a
ganz wichtig...đ cooles grĂŒn... (aufhĂŒbschen kann man den output, wenn alles lĂ€uftđ )
C:\Users\TimGoldschmidt\Desktop ...
was gefÀllt Dir nicht an "%UserProfile%\Desktop" ? Das passt immer, egal ob der Nutzer Rumpestilzchen oder Erzesel heist.
echo "%UserProfile%\Desktop"
und natĂŒrlich sollte man Pfade immer in "GĂ€nsefĂŒĂchen" an Befehle ĂŒbergeben
was muss ich noch hinzufĂŒgen, damit der Kopierte Ordner im Backup Ordner das Datum + die Zeit anzeigt?
Ich habe doch in den obigen beiden Demos erklÀrt, wie man eine guten Zeitstempel erstellt.
richtig:
rem Zeistempel erstellen
set "ZTime=%time: =0%"
set "TimeStamp=%date:~6,4%%date:~3,2%%date:~0,2%%ZTime:~0,2%%ZTime:~3,2%%ZTime:~6,2%
echo %Timestamp%
total falsch:
set "TimeStamp=%date%_%time%"
- %Time% beinhaltet einen Doppelpunkt(e)! Diese sind in Datei-/Ordnernamen unzulÀssig. (Der Doppelpunkt kennzeichnet unter Windows Laufwerkbuchstaben)
- einstellige Stunden beginnen mit einem Leerzeichen. (das ist in WindowsDateinamen zwar nicht kritisch, aber unschön
- ein deutsches Datum beginnt mit dem Tag. Wollte man solche Datatumstrings sortieren, wĂŒrden alle Daten nach dem Tag sortiert erscheinen:
01.05.2022
07.02.2022
09.09.2022
10.02.2022
14.10.2021
...die sind wirklich sortiert! (inakzeptabel)
Wenn ich etwas auf ein bestimmte Art tue, hat das seine Bewandtnis. international gebrÀuchlich ist ein Zeitstempel im Format "yyyyMMddHHmmss" (20220914131949) das entsprich jahr:2022 monat:09 tag:14 stunde:13 minute:19 sekunde: 49
...und lÀsst sich perfekt sortieren:
20211031131852
20211219131852
20211224131852
20220308131852
20220523131852
wie kann ich das jetzt vorhandene Script erweitern, damit es ĂŒberprĂŒft ob dann schon 3 Backups vorhanden sind und somit beim 4ten versuch das Ă€lteste löscht damit es immer 3 Backups bleiben.
...macht Doch die 1.Demo.
for /f "skip=3 ...usw. ĂŒberspringt 3 ĂŒbermittelte Ergebnisse. Wenn dann nichts ĂŒbrig bleibt wird der Loop-Body ( do (...) ) nicht ausgefĂŒhrt. Die Routine ist logisch bereits so aufgebaut, das sie automatisch 3 Ergebnisse bewahrt, indem sie diese nicht an den Löschbefehl ĂŒbergibt. was soll da noch extra ĂŒberprĂŒft werden?
du hĂ€ttest nichts weiter tun mĂŒssen als die entsprechend Routine zu ĂŒbernehmen und die Pfade /Wildcard-Muster anzupassen.
Die Nummer mit forFiles scheidet ohnehin aus, weil sie mehr als 3 backups innerhalb 3 Tagen zulÀsst...
also nochmal Demo1.cmd an Deine neuen Pfadvorgaben angepasst: lösche ggf. die gekennzeichneten Zeilen, welche die Demoumgebung kreieren.
@echo off
chcp 65001 >nul
set "Basefolder=%userprofile%\Desktop"
set "BackupBase=%userprofile%\Desktop\Backup
rem erzeuge testordner die folgenden 3 Zeilen können weg
md "%Basefolder%\Testordner" 2>nul
echo Hallo Test >"%Basefolder%\Testordner\blubb.txt"
md "%Basefolder%\Testordner\blubbFolder"
color a &rem hauptsache grĂŒn
rem Zeistempel erstellen
set "ZTime=%time: =0%"
set "TimeStamp=%date:~6,4%%date:~3,2%%date:~0,2%%ZTime:~0,2%%ZTime:~3,2%%ZTime:~6,2%
rem erstelle Backup
xcopy "%Basefolder%\Testordner\" "%BackupBase%\Testordner_%TimeStamp%\" /ehyrk
for /f "skip=3 tokens=*" %%a in ('dir /b /ad /tc /o-d "%BackupBase%\Testordner_20*"') do (
echo lösche: "%BackupBase%\%%~a"
rd /s /q "%BackupBase%\%%~a"
)
pause
Jetzt Funktioniert Alles perfekt, und ich habe was neues Gelernt vielen dank fĂŒr die Hilfe :)
relativ simpel: behÀlt nur die Neuesten 3 Backups.
demo.cmd
@echo off
chcp 65001 >nul
set "Basefolder=%userprofile%\Desktop\Test"
rem erzeuge testordner auf dem aktuellen Desktop\test
md "%Basefolder%\Testordner" 2>nul &rem fehler unterdĂŒcken, wen ordner bereits existiert.
rem erzeuge zur Demo auch noch ne Datei und eine Unterverzeichnis im Ordner
echo Hallo Test >\Testordner\blubb.txt"
md "%Basefolder%\Testordner\blubbFolder"
rem einstellige Stunden mit 0 auffĂŒllen (einstellige Stunden hanben normal das Format " 3:48:55,35")
set "ZTime=%time: =0%"
rem Zeitstempel JahrMonatTagStundeMinuteSekunden wird sortiert angezeigt (nur so herum macht ein Timstamp im Namen Sinn) ...umordnen... (millisekunden werden nicht gebraucht)
set "TimeStamp=%date:~6,4%%date:~3,2%%date:~0,2%%ZTime:~0,2%%ZTime:~3,2%%ZTime:~6,2%
rem erstelle Backup
xcopy "%Basefolder%\Testordner\" "%Basefolder%\Testordner_%TimeStamp%\" /sehyrk
rem lösche alle Ordner auĂer den neuesten 3
rem (sortiere ordner nach Erstellungszeit /tc, Neueste zuerst /o-d , ĂŒberspringe die ersten 3)
rem damit Du nicht auch den fast gleichnamigen Originalordner erwischst der Filter testordner_20* ,denn das hanen alle Backups gemeinsam
for /f "skip=3 tokens=*" %%a in ('dir /b /ad /tc /o-d "%Basefolder%\testordner_20*"') do (
echo lösche: "%Basefolder%\%%~a"
rd /s /q "%Basefolder%\%%~a"
)
pause
- https://docs.microsoft.com/de-de/windows-server/administration/windows-commands/dir
- https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/for
Fast das Gleiche, löscht jedoch nur Backupordner, welche Àlter als 3 Tage sind.:
demo2.cmd
@echo off
chcp 65001 >nul
set "Basefolder=%userprofile%\Desktop\Test"
md "%Basefolder%\Testordner" 2>nul
echo Hallo Test >\Testordner\blubb.txt"
md "%Basefolder%\Testordner\blubbFolder"
set "ZTime=%time: =0%"
set "TimeStamp=%date:~6,4%%date:~3,2%%date:~0,2%%ZTime:~0,2%%ZTime:~3,2%%ZTime:~6,2%
xcopy "%Basefolder%\Testordner\" "%Basefolder%\Testordner_%TimeStamp%\" /sehyrk
rem filter Pfade im Basefolder mit dem Muster "Testordner_20*" die Àlter als 3 Tage und Ordner sind, lösche diese
forfiles /p "%Basefolder%" /m "Testordner_20*" /d -3 /c "cmd /c if @isdir==TRUE echo lösche: @path & rd /s /q @path"
pause
Danke fĂŒr dieses Script, ich habe jetzt Testweise auch versucht es Selbst zu schreiben und habe das bis jetzt.
@ECHO off
color a
xcopy C:\Users\TimGoldschmidt\Desktop\Testordner\* C:\Users\TimGoldschmidt\Desktop\Backup\ /E /G /H /Y
ECHO Backup abgeschlossen!
PAUSE
Der Ordner wird in den Backup Ordner kopiert.
jetzt wĂ€re die Frage, was muss ich noch hinzufĂŒgen, damit der Kopierte Ordner im Backup Ordner das Datum + die Zeit anzeigt? und zusĂ€tzlich wie kann ich das jetzt vorhandene Script erweitern, damit es ĂŒberprĂŒft ob dann schon 3 Backups vorhanden sind und somit beim 4ten versuch das Ă€lteste löscht damit es immer 3 Backups bleiben.
LG