Batch - Archiv überschreiben
Hallo zusammen,
ich schreibe zur Zeit einen kl. Batch, der bestimmte configs usw... sichert. Soweit funktioniert das Ganze auch. Erlegt jede Woche ein Archiv (name1, name2,usw). Doch wenn er bei 10 angekommen ist, soll er wieder das name1 überschreiben. Also ein ständiger Kreislauf.
OS ist Windows Server 2003 EE.
Warum ich das Ganze mache, ganz einfach uns "tolles" Backupprogramm hat manchmal einen Hänger. Somit habe ich mich entschlossen, dieses gegen ein paar Zeilen Batch zuersetzen und Geld zusparen.
Gruß
Dani
ich schreibe zur Zeit einen kl. Batch, der bestimmte configs usw... sichert. Soweit funktioniert das Ganze auch. Erlegt jede Woche ein Archiv (name1, name2,usw). Doch wenn er bei 10 angekommen ist, soll er wieder das name1 überschreiben. Also ein ständiger Kreislauf.
OS ist Windows Server 2003 EE.
Warum ich das Ganze mache, ganz einfach uns "tolles" Backupprogramm hat manchmal einen Hänger. Somit habe ich mich entschlossen, dieses gegen ein paar Zeilen Batch zuersetzen und Geld zusparen.
Gruß
Dani
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 48069
Url: https://administrator.de/forum/batch-archiv-ueberschreiben-48069.html
Ausgedruckt am: 10.04.2025 um 23:04 Uhr
13 Kommentare
Neuester Kommentar
Hallo Dani!
Du könntest es so anlegen, dass Du (nachdem alle 10 Dateien erstellt wurden) jeweils die älteste .zip-Datei suchst, diese löschst und den frei gewordenen Dateinamen für die neue .zip-Datei verwendest - etwa so:
Verbesserungen/Verschönerungen (wie etwa noch eine Variable für den Pfad, Logging, etc) fallen Dir (oder jedenfalls Biber) dazu sicher noch ein.
Grüße
bastla
Du könntest es so anlegen, dass Du (nachdem alle 10 Dateien erstellt wurden) jeweils die älteste .zip-Datei suchst, diese löschst und den frei gewordenen Dateinamen für die neue .zip-Datei verwendest - etwa so:
echo off & setlocal
for /f %%i in ('dir D:\Sicherungen\*.zip /b /o-d') do set Letzte=%%i
del D:\Sicherungen\%Letzte%
move D:\Sicherungen\Temp\neu.zip D:\Sicherungen\%Letzte%
Grüße
bastla
So, als Starthilfe: 
Grüße
bastla
[Edit] Pfad bei "if not exist ..." ergänzt [/Edit]
echo off & setlocal
set Neue=0
for /l %%i in (10,-1,1) do if not exist D:\Sicherungen\Name%%i.zip set Neue=%%i
if [%Neue%]== goto :Rotation
move D:\Sicherungen\Temp\neu.zip D:\Sicherungen\Name%Neue%.zip
goto :eof
:Rotation
for /f %%i in ('dir D:\Sicherungen\Name*.zip /b /o-d') do set Letzte=%%i
del D:\Sicherungen\%Letzte%
move D:\Sicherungen\Temp\neu.zip D:\Sicherungen\%Letzte%
Grüße
bastla
[Edit] Pfad bei "if not exist ..." ergänzt [/Edit]
Hm, Dani,
wenn Du eh noch am Basteln bist...
bastla's :rotation geht ein bisschen in die Grütze, wenn noch gar keine Datei name*zip existiert.
Tritt zwar wirklich nur beim allerallerersten Mal auf, aber da es ja nun die Zeilenanzahl verdoppelt, würde ich diesen Fall berücksichtigen
@bastla
Und Du hast Recht: Die Angaben für den Sicherungspfad und die Namens-Patterns hätte ich auch in Variablen gepackt.
Will doch nicht 10 Zeilen ändern, wenn sich eine Pfadangabe ändert... Und wenn, schreib ich einen Batch dafür
Grüße
Biber
wenn Du eh noch am Basteln bist...
bastla's :rotation geht ein bisschen in die Grütze, wenn noch gar keine Datei name*zip existiert.
Tritt zwar wirklich nur beim allerallerersten Mal auf, aber da es ja nun die Zeilenanzahl verdoppelt, würde ich diesen Fall berücksichtigen
...
:Rotation
if exist D:\Sicherungen\Name*.zip (
for /f %%i in ('dir D:\Sicherungen\Name*.zip /b /o-d') do set Letzte=%%i
) ELSE (
Set Letzte=name1.zip
)
IF exist D:\Sicherungen\%Letzte% del D:\Sicherungen\%Letzte%
move D:\Sicherungen\Temp\neu.zip D:\Sicherungen\%Letzte%
@bastla
Und Du hast Recht: Die Angaben für den Sicherungspfad und die Namens-Patterns hätte ich auch in Variablen gepackt.
Will doch nicht 10 Zeilen ändern, wenn sich eine Pfadangabe ändert... Und wenn, schreib ich einen Batch dafür
Grüße
Biber
@Biber
War nur auf die Schnelle hingeschrieben (den Pfad hatte ich nur zur Verdeutlichung noch nachgereicht)
Grüße
bastla
War nur auf die Schnelle hingeschrieben (den Pfad hatte ich nur zur Verdeutlichung noch nachgereicht)
bastla's :rotation geht ein bisschen in die Grütze, wenn noch gar keine Datei name*zip existiert.
Einspruch, Euer Biber - die Routine :rotation wird (in der zweiten Fassung oben) ja nur erreicht, wenn es keine freien Dateinamen von Name10 bis Name1 mehr gibt (und für die erste Fassung gilt das Kleingedruckte: nachdem alle 10 Dateien erstellt wurden) ...Grüße
bastla
Nö, nö, bastla,
Einspruch abgelehnt.
..wenn gar keine einzige name*.zip existiert, dann geht er wohl in die :Rotation.
Und kommt da ins Rotieren.
Aber klar, ein wenig spitzfindig ist es natürlich schon...
Ich finde Dani's grünen Haken vollauf gerechtfertigt und wenn er diese Frage nicht in "Betriebssysteme" gesetzt hätte,
hätte ich den Thread auch schon geschlossen.
Also, schönen Feierabend jetzt
Biber
Einspruch abgelehnt.
set Neue=0
for /l %%i in (10,-1,1) do if not exist D:\Sicherungen\Name%%i.zip set Neue=%%i
if [%Neue%]== goto :Rotation
...
Und kommt da ins Rotieren.
Aber klar, ein wenig spitzfindig ist es natürlich schon...
Ich finde Dani's grünen Haken vollauf gerechtfertigt und wenn er diese Frage nicht in "Betriebssysteme" gesetzt hätte,
hätte ich den Thread auch schon geschlossen.
Also, schönen Feierabend jetzt
Biber
@Biber
Nicht, dass wir uns noch im Kreis drehen
, aaaber: Hast Du das wirklich mit dem Erfolg getestet, dass %Neue% nach der "for /l ..."-Zeile den Wert 0 hat? Bei mir endet es, wie es soll, damit, dass in %Neue% 1 steht (die Nummer der letzten der "nicht existenten" Dateien Name10.zip, Name9.zip, ..., Name1.zip)
Grüße
bastla
Nicht, dass wir uns noch im Kreis drehen
Grüße
bastla
@bastla
Uuups - hast Recht.
Nehme alles zurück.
Keine Anpassungen nötig - und sollte mir in diesem oder nächsten Jahr endlich mal Urlaub bewilligt werden, wäre ich hocherfreut, wenn Du hier meine Urlaubsvertretung übernimmst.
Gruß
Biber
Uuups - hast Recht.
Nehme alles zurück.
Keine Anpassungen nötig - und sollte mir in diesem oder nächsten Jahr endlich mal Urlaub bewilligt werden, wäre ich hocherfreut, wenn Du hier meine Urlaubsvertretung übernimmst.
Gruß
Biber
@Biber

Aber Spass beiseite, natürlich fühle ich mich sehr geehrt.
Grüße
bastla
... sollte mir in diesem oder nächsten Jahr endlich mal Urlaub bewilligt werden ...
Was willst Du denn mit dem Zeug? Urlaub ist doch das, was im Herbst im Urwald am Boden rumliegt, oder war da noch was anderes ...? Urlaubsvertretung
Findest Du das als Strafe für ein ganz klein wenig Rechthaberei nicht etwas heftig?Aber Spass beiseite, natürlich fühle ich mich sehr geehrt.
Grüße
bastla