CMD Backupscript erstellen nach Vorgabe?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
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
 
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Timi221 
Fragesteller
 14.09.2022, 14:16

Jetzt Funktioniert Alles perfekt, und ich habe was neues Gelernt vielen dank fĂŒr die Hilfe :)

0

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

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Timi221 
Fragesteller
 14.09.2022, 10:31

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

0