Jump to content

2 Batch Dateien erstellen zum Sichern und löschen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Zusammen,

 

ich besitze einen Windows 2016 Server und auf diesem laufen verschiedene Spiele.

Ich würde gerne den Aufgaben Planer nutzen wo zum Beispiel ein Minecraft Server 2 mal ein Backup am Tag ausgeführt werden soll.

Ich habe folgendes gefunden was aber nicht die richtige Lösung für mich ist.

SET COUNTER=0
:loop
SET /a COUNTER=%COUNTER%+1
XCOPY "Server\*" "c:\minecraft\backups\server_backup_%COUNTER%" /i /s
PING 1.1.1.1 -n 1 -w 600000 > NUL
goto loop

In diesem Beispiel ist ein loop vorhanden. Was ich nicht möchte, da es dann dauerhaft in einer Schleife laufen würde.

Ich habe die Schleife entfernt und dann sieht es so aus.

SET COUNTER=0
SET /a COUNTER=%COUNTER%+1
XCOPY "Server\*" "c:\minecraft\backups\server_backup_%COUNTER%" /i /s

Jetzt habe ich dabei folgendes Problem. Wenn noch kein Backup vorhanden ist, dann erstellt er eins und die Batch Datei schließt sich wieder.

So in etwa habe ich das gewollt. Problem ist aber, starte ich die Batchdatei erneut wird festgestellt das es ein erstelltest Verzeichnis schon gibt und

fragt mich ob ich überschreiben möchte. 

Wie kann ich in der Batchdatei sagen, dass er bitte mit dem nächsten Backup weiter machen soll. Also er soll prüfen ob schon etwas abgelegt wurde,

wenn ja erstelle das nächste Backup. Am besten wäre es, wenn das ganze Verzeichnis in eine rar Datei gepackt werden würde.

 

Die zweite Batch Datei soll bitte ältere Backups vom Server löschen die von mir aus 10 Tage alt sind. Das würde ich halt auch gerne als Aufgabe planen in

Windows Server 2016.

 

Hat da jemand Ahnung von Euch, wie ich das am besten hin bekomme?

 

Mit dem Counter erstellt er mir jeweils Verzeichnis server_backup_1, dann server_backup_2 usw.

Das funktioniert aber nur wenn es im loop läuft.

 

Danke

 

mfg

 

Hoschy2020

Link zu diesem Kommentar

Na dann wollen wir Dir das mal ausnahmsweise ein bissl schmackhaft machen. ;-):aetsch2:

 

In Powershell würde Dein erstest Script im einfachsten Fall vielleicht so aussehen können:

$TimeStamp = Get-Date -Format 'yyyyMMdd'
Copy-Item -Path "Server\Folder to be backed up" -Destination "c:\minecraft\backups\server_backup_$TimeStamp"

Das erzeugt eine Kopie eines Ordners in einem anderen Ordner mit einem Zeitstempel statt einem Zähler. Das sollte jemand mit rudimentären English-Kenntnissen eigentlich ziemlich verständlich finden. ;-)

 

Das zweite Script zum Aufräumen ist auch nicht schwer:

Get-ChildItem -Path "c:\minecraft\backups" -Directory | 
    Sort-Object -Property LastWriteTime -Descending | 
        Select-Object -Skip 10 |
            Remove-Item -Recurse -Force

Hier wird die mächtige Powershell Pipeline genutzt, um alle Unterverzeichnisse des Backup-Verzeichnisses zu ermitteln, diese nach letztem Zugriff absteigend zu sortieren und davon die ersten 10 zu überspringen. Der Rest wird gelöscht.

 

Ich finde das deutlich einfacher zu lesen als die cryptischen cmd Befehle.

bearbeitet von BOfH_666
Code und Rechtschreibung und Grammatik korrigiert ;-)
Link zu diesem Kommentar

Das kommt drauf an ... es kann aber nicht schaden, wenn Du in der Kommandozeile die Option -ExecutionPolicy Bypass mitgibst. Die anderen möglichen/nötigen Optionen kannst Du mit Powershell /? erfahren.

 

Ach ja ...  wie immer gilt natürlich, dass Du Scripte nicht an Deinen "produktiven Daten" testen solltest. Besonders, wenn Du sie nicht 100-ig verstehst.  ;-)

bearbeitet von BOfH_666
Link zu diesem Kommentar

Hmmm ... normalerweise liefern wir hier keine "schlüsselfertigen" Lösung frei Haus. Wir erwarten ein gewisses Maß an Eigentinitiative und Mitarbeit - es ist schließlich ein Forum für IT-Profis. ;-) Die Schnipsel oben waren nur dazu gedacht, Dir zu zeigen, dass Powershell alles andere als schwierig ist. Es liegt meiner Meinung nach aber jenseits der Aufgabe dieses Forums, Dir iterativ eine fertige Lösung für Dein Problem zusammenzubasteln.

 

Ich empfehle Dir dingend, Dir die Grundlagen von Powershell anzueignen. Solltest Du vorhaben, Dich noch eine Weile im Windows-Server-Umfeld zu bewegen, lohnt sich das ganz sicher AUF JEDEN FALL. Das geht mit einem guten Buch oder einem online Tutorial oder sogar mit ein paar gut gewählten Videos ganz einfach. Dabei lernt man auch, wie und wo man am besten Hilfe bekommt - die ist bei Powershell quasi eingebaut.

 

Für die Erweiterung des Codes mit den von Dir gewünschten Funktionen solltest Du Dir die Hilfe für die cmdlets Compress-Archive und Get-ChildItem näher ansehen. Du solltest Dir jeweils die komplette Hilfe inklusive der Beispiele ansehen, um zu lernen, wie man sie benutzt.

 

Wenn Du Code hast, der aber eventuell nicht das tut, was Du erwartest oder der Fehlermeldung produziert, die Du nicht selbst beseitigt bekommst, kannst Du den hier gern posten und wir werden versuchen Dir zu helfen.

Link zu diesem Kommentar
  • 2 Wochen später...

Moin Hoschy,

auch wenn manch einer das hier nicht so gerne liest *grins*,  lässt sich Dein Prob auch mit einer Batch lösen.  Du willst ja ganz gern Spiel(zu)stände sichern und ich vermute mal, im Prinzip nicht nur zwei, sondern evtl. sogar noch mehr. 

Damit Du anderen Sachen nicht in die Quere kommst, mach in Deinem HomeDir ein Verzeichnis (z.B.) MineBack. Da rein kommt die Batch. Außerdem eine Notepad-Datei (in der z.B. "HUHU" steht) und die Du MineSafe.001 benennst. Jetzt kannst Du in Deiner Batch abfragen:

 

IF EXIST MineCraftSichern.Nein GOTO Ende   (optional, s.u.)
IF EXIST MineSafe.001 GOTO S001
IF EXIST MineSafe.002 GOTO S002
IF EXIST MineSafe.003 GOTO S003
...
IF EXIST MineSafe.020 GOTO S020


:S001
ROBOCOPY [Quelle] [Zielverzeichnis]\001  /XO /S
REN MineSafe.001 MineSafe.002
GOTO Ende

 

:S002
ROBOCOPY [Quelle] [Zielverzeichnis]\002  /XO /S
REN MineSafe.002 MineSafe.003
GOTO Ende

 

:S003

ROBOCOPY [Quelle] [Zielverzeichnis]\002  /XO /S
REN MineSafe.002 MineSafe.003
GOTO Ende

 

...

 

:S020
ROBOCOPY [Quelle] [Zielverzeichnis]\002  /XO /S
REN MineSafe.020 MineSafe.001
GOTO Ende


:Ende


Wenn Du die Batch als Task z.B. einmal stündlich anwerfen willst, solltest Du einen weiteren "Dateischalter" verwenden, den zwischen MineCraftSichern.JA und MineCraftSichern.NEIN umbenennst. Dann trägst Du den Sicherungsauftrag im Taskplaner als stündlich ein und (de) aktivierst ihn durch Umbenennen von MineCraftSichern.NEIN in MineCraftSichern.JA.


Im Übrigen empfehle ich Dir zum Einarbeiten in Powershell, erstmal zu probieren, schon vorhandenen Batche in der PowerShell auszuführen - sei es als komplette Batch, sei es Schritt für Schritt aus der PS-Konsole. Viele Batchbefehle werden automatisch "übersetzt". So liefe die o.g. Batch auch als .PS1

Und die Sache mit den "Dateischaltern" kann ein mächtiges Werkzeug auch in der PowerShell-Umgebung werden. Man ist ja nicht auf einen einzigen Dateischalter angewiesen. Durch Kopieren, Umbenennen oder Löschen solcher Dateien lässt sich zwar umständlich, aber immerhin tatsächlich objektorientiert Scripten ...  

Gegrüßt!

Link zu diesem Kommentar

Moinmoin,
den meisten wird es wohl gleich auffallen: In dem Beispiel oben habe ich bei :S003 und :S020 hinter Zielverzeichnis \002 stehen gelassen. Es muss natürlich \003 und \020 heißen, da jeder Sicherungslauf revolvierend in die (ggf. durch Robocopy neu angelegten) Verzeichnisse \001, \002, \003, ... \019, \020 schreiben soll.

Sorry, aber beim Copy&Paste bin ich trotz aller Vorsicht manchmal nachlässig.
Gegrüßt!
 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...