146321
Goto Top

Aktuelles Datum und Uhrzeit per Batch in Ordnernamen mit robocopy aktualisieren

Hallo, moin, guten Tag, guten Abend, guten Mittag und natürlich auch guten Nachmittag! (Hoffe, jeder ist jetzt glücklich :D)

Ich habe ein herausforderndes Problem.

Der Skript funktioniert super, aber der Ordner, der beim Start des Scripts mit dem aktuellen Datum erstellt wird, wird während der Skript läuft nicht nochmal mit dem neuen aktuellen Datum erstellt, sondern bleibt beim alten Datum vom ersten Ordner, bedeutet der alte Ordner wird überschrieben oder nichts passiert dank (/XC /XN /XO).
Das liegt daran, dass der Skript in eine unendliche Schleife geht wegen /mon:1 /mot:1, was gut ist, aber das Datum wird NICHT aktualisiert.

Wie kann ich das so machen, dass der Ordner nicht überschrieben wird, sondern immer ein neuer Ordner mit dem aktuellen Datum erstellt wird?
Ich habe Vieles probiert, nichts hat geholfen. Ich bevorzuge "robocopy" und hoffe, dass jemand ne Idee hat fürs Problem.

Bitte um Hilfe, danke sehr!


Code:
@echo off
color 2

Set Source=C:\source
Set Destination=C:\destination
Set Folder=FolderName
Set currentdate=%date:/=-%_%time::=-%

robocopy "%Source%" "%Destination%\%currentdate% %Folder%" /E /XC /XN /XO /mon:1 /mot:1  

Content-Key: 613505

Url: https://administrator.de/contentid/613505

Printed on: April 18, 2024 at 22:04 o'clock

Member: rubberman
rubberman Oct 16, 2020 at 20:26:44 (UTC)
Goto Top
Sorry aber ich habe nicht verstanden in welchem Fall dein Zeitstempel aktualisiert werden soll. Hast du irgendwo eine Schleife implementiert oder ist das tatsächlich 1:1 das Script, das du verwendest?

Steffen
Member: c0d3.r3d
c0d3.r3d Oct 16, 2020 at 20:32:35 (UTC)
Goto Top
Kein Hallo,

Dein Skript läuft aktuell so ab, dass das Skript gestartet wird und einmalig bis zum Neustart des Skriptes die Variable vom Datum gesetzt wird. Es sollte logisch sein, dass wenn ein neuer Tag beginnt das Skript Neugestartet wird, oder eine Schleife implementiert wird welche überprüft, ob das gesetze Datum noch mit dem aktuellem Datum des Systems übereinstimmt.

Die saubere Lösung wäre aber z.B. mit der Aufgabenplanung das Skript jeden Tag um 0:00 Uhr neustarten zulassen.
Mitglied: 146321
146321 Oct 16, 2020 at 21:59:43 (UTC)
Goto Top
Danke für deine Antwort! Das ist der tatsächliche Code. Es ist ganz einfach, der Name des Ordners soll das aktuelle Datum + den Namen des Ordners von Source. (Name des Ordners in Destination "...%currentdate% %Folder%"). Das Problem ist, dass das Datum nicht aktualisiert wird im Ordnernamen.
Mitglied: 146321
146321 Oct 16, 2020 updated at 22:07:24 (UTC)
Goto Top
Danke für deine Antwort und natürlich hallo!

Die Lösung mit dem Neustarten des Skriptes würde ich eher nicht nehmen, weil das bedeuten würde, dass ich nur jeden Tag ein Backup erstellen könnte. Ältere Backups sollen natürlich nicht überschrieben werden, klar könnte ich den Skript auch alle 30min neu starten lassen, aber das würde ich nicht machen.

Dein erster Vorschlag gefällt mir viel besser, aber wie genau würde diese Schleife aussehen im Code? Ich wäre dir dankbar, wenn du die Änderung am Code vornimmst.

Danke sehr!
Member: rubberman
rubberman Oct 16, 2020 at 22:10:17 (UTC)
Goto Top
c0d3.r3d hat es bereits geschrieben. In Zeile 7 weist du den Wert für currentdatezu. Solange das Script nicht neu gestartet wird, ändert sich dieser Wert nicht. Für den Neustart sehe ich leider auch keine Alternative.

Steffen
Member: c0d3.r3d
c0d3.r3d Oct 16, 2020 updated at 22:19:20 (UTC)
Goto Top
Beide Varianten würden einen Neustart des Skriptes ausführen.

Einmal über die Aufgabenplanung, oder alternativ, wenn das Datum nicht mehr übereinstimmt über eine Schleife. Mir ist nicht bekannt - ich habe jedoch auch keine großen Batch-Kenntnisse - dass eine Variable nachträglich verändert werden kann.

Die Variante mit der Aufgabenplanung ist übrigens die Elegantere, welche nach 24 Stunden das Skript neustartet, als die mit der Schleife im Quellcode.
Member: rubberman
rubberman Oct 16, 2020 at 22:18:26 (UTC)
Goto Top
Solange du /monund /motdefinierst, hängt robocopy in einer internen Schleife. Du müsstest die Überwachung des Verzeichnisses schon selbst vornehmen um eine Chance zu haben das Datum zu aktualisieren.

Steffen
Mitglied: 146321
146321 Oct 16, 2020 at 22:19:36 (UTC)
Goto Top
Warten wir mal auf seine erste Lösung mit der Schleife. Wenn sie funktioniert, dann wäre das fantastisch.

LG
Mitglied: 146321
146321 Oct 16, 2020 at 22:25:48 (UTC)
Goto Top
Wenn du mit Überwachung, Umbenennung des Ordners meinst, dann bringt es nichts, habe ich auch probiert, so wird das Datum nicht aktualisiert.

Ich bin mir sicher, dass es eine Lösung gibt, die vielleicht sogar einfach ist, aber ich komme selbst nicht drauf, da ich neu in Batch bin.
Member: rubberman
rubberman Oct 16, 2020 at 22:34:44 (UTC)
Goto Top
Nein mit Überwachung meine ich die Änderungsevents die dazu führen das robocopy erneut kopiert.
             /MON:n :: Überwacht die Quelle. Wird erneut ausgeführt, wenn mehr
                       als n Änderungen gefunden werden.
             /MOT:m :: Überwacht die Quelle. Wird bei einer Änderung erneut
                       ausgeführt in m Minuten.
Das Script steht in der robocopy Zeile, da robocopy die Überwachung selbst intern ausführt. Eine Schleife um die robocopy Zeile herum zu bauen hat keinen Effekt, da sie nie iteriert.
Schau dir mal in PowerShell so etwas wie System.IO.FileSystemWatcher an. Damit kannst du die Überwachung selbst ausführen und /mon und /mot aus der robocopy Kommandozeile werfen.

Steffen