Batch Ordner auf Server verschieben von Uhrzeit bis Uhrzeit

MagnaUser

Cadet 1st Year
Registriert
Juli 2021
Beiträge
12
Hallo an alle Programmierer,

Ich bin neu hier bei Euch und könnte Eure Unterstützung gebrauchen.

Es geht um folgendes. In einem Ordner D:\Export\... sind viele Ordner die ich zu einem
bestimmten Zeitpunkt mit einer Batchdatei und der Aufgabenplannung (Win10)
auf ein Netzlaufwerk (ist gemappt Z:\Prozessdaten) kopieren (besser verschieben) möchte.

Mit diese Codesnippsel kann ich mir die Ordnern mit Datum und Uhrzeit anzeigen lassen.

@Echo off
setlocal

set "SrcDir=D:\Export"

for /d %%d in ("%SrcDir%\.") do (echo %%~td %%~fd)

Meine Fähigkeiten liegen mehr beim suchen, kopieren und einfügen.
Das habe ich mir schon angeschaut.
https://administrator.de/tutorial/tutorial-zur-for-schleife-155681.html#toc-5

Aber darin finde ich nichts konkretes für Ordner für meinen Fall. Selbst Google findet sehr wenig für mein vorhaben.
Ich möchte z.B. alle Unterordner von D:\Export\... zwischen 06:00 - 14:00Uhr auf das Netzlaufwerk verschieben.
Alle Ordner die leer sind sollen zurückbleiben.

Wer kann mir bitte helfen.

Grüße MagnaUser
 
Powershell wäre sicherlich die deutlich bessere Option als batch.

Ist für dich eine Powershell Lösung denkbar?
 
  • Gefällt mir
Reaktionen: kuddlmuddl und NotNerdNotDau
Ich verstehe dein Anliegen nur so halb, aber es klingt eher nach einer Aufgabe für Robocopy.
 
Hallo pizza4ever,

Vielen Dank für deine Antwort. Powershell wäre auch eine Lösung. Ich muss halt schauen ob ich es nutzen kann. Ich hatte mich für batch entschieden da es für mich die einfachste Variante ist. Ist Powershell von Haus aus aktiv?

@Raijin
Was verstehst du den nicht?

Vielen Dank nochmals für die Antworten.

Grüße MagnaUser
 
Weil du einerseits davon sprichst, zeitlich über den Taskplaner einen Kopier- bzw. Verschiebejob zu starten, andererseits aber auch auf den Zeitstempel der Dateien guckst. Das erschließt sich mir nicht so recht. Wenn du im Task einfach den Ordner mittels Verschieben leer machst, ist der Zeitstempel der Dateien doch egal - es sei denn es ist davon auszugehen, dass in dem fraglichen Ordner Dateinamen auftauchen, die bereits im Zielordner vorhanden sind.

Wie dem auch sei, mittels Robocopy kannst du die Zeitstempel-Prüfung direkt durchführen, ohne irgendwelches Skriptgedöns. Einmal Robocopy mit den richtigen Paramatern definieren und dann im Taskplaner so oft aufrufen wie du möchtest. Es wird keinerlei Batch- oder PowerShell-Skript benötigt, da Robocopy das ganz allein macht. Man muss das Rad nicht neu erfinden.
 
  • Gefällt mir
Reaktionen: pizza4ever und BoeserBrot
Hallo,

Powershell ist doch keine Option ist von der IT gesperrt. Nur Batch und VBS.

Deswegen habe ich mir Robocopy angeschaut und habe entdeckt das man ein
Mindestalter angeben kann. Also habe ich meinen Plan geändert.

Folgender Code funktioniert hat aber für meinen Fall einen Fehler.

robocopy.exe D:\Export Z:\Prozessdaten /e /MOVE /MINAGE:1

Und zwar wird durch die Option /Move nach dem Verschieben die Quellordner gelöscht.
Der Ordner Export ist ein freigegebener Ordner und löst einen Fehler aus, wenn Robocopy dann
die Ordner löscht.
Kann ich es irgendwie verhindern, dass der Ordner Export gelöscht wird, sondern nur die Unterordner?

Sollte das nicht möglich sein, kann mir einer von Euch sagen wie ich mit Batch dann alle Ordner die älter als 1 Tag sind verschieben kann?

Vielen Dank

Grüße MagnaUser
 
/MOV :: MOVe files (delete from source after copying).
/MOVE :: MOVE files AND dirs (delete from source after copying).

Versuch es mal damit. Bin mir aber nicht sicher ob das nicht auch für die Unterverzeichnisse gilt. Also lieber mit Vorsicht ausprobieren.

Alternativ könnte man versuchen, mit /XD das fragliche Verzeichnis auszuschließen.

Eine weitere Möglichkeit wäre ein Dummy-File im fraglichen Ordner, das man explizit mit /XF ausschließt. So kann Robocopy das Verzeichnis nicht löschen, weil es nicht leer ist.
 
Zuletzt bearbeitet:
Hallo Raijin,

Vielen Dank für deine Antwort hat mir sehr geholfen.

robocopy.exe D:\Export Z:\Prozessdaten /S /MOVE /MINAGE:1 /R:2 /W:3 /NP /LOG+:"D:\Export\log-%date:~0,2%-%date:~3,2%-%date:~6,4%-%time:~0,2%-%time:~3,2%-%time:~6,2%.log" /XF *.log

Mit /XD habe ich es nicht hinbekommen er löscht den Ordner trotzdem.
Aber /XF hat geholfen und dann habe ich gleich noch das Logging mit eingebaut.

Jetzt wäre es schön, wenn du mir sagen kannst, wie ich es verhindern kann das die leeren Ordner in der
Quelle gelöscht werden. Mit der Option /S werden keine kopiert.
Aber wegen der Option /MOVE werden in der Quelle alle gelöscht.
Ich benötige die Ordner für eine Gegenprüfung sie dürfen nicht gelöscht werden.

Vielen Dank für deine Unterstützung.

Grüße MagnaUser
 
Hast du denn mal /MOV statt /MOVE ausprobiert wie in #8 vorgeschlagen?

Ansonsten kannst du das ganze natürlich trotzdem in eine Batch-Datei packen, um zum Ziel zu kommen. Zunächst wird in der Batch mittels robocopy alles kopiert statt verschoben und anschließend löschst du in der Quelle alle Dateien und belässt die Ordner da wo sie sind. Kleiner Haken an der Sache: Wenn zwischen Kopieren und Löschen neue Dateien reinkommen, werden die mitgelöscht.
 
Hallo,

Das habe ich ausprobiert und das kann ich nicht gebrauchen, weil ja nur Dateien kopiert werden und mit der Option /MOV wird die Quelle nicht gelöscht. Somit bleiben viele Ordner leer und ich kann Sie nicht mehr von den Ordnern unterscheiden, die sowieso leer waren.

Ich muss also vor dem Verschieben alle Ordner die leer sind herausfiltern und separieren.
Hättest du eine Idee dafür? Das geht doch bestimmt mit einer For Schleife in einer Batch Datei.
Und danach kann ich ja Robocopy aufrufen.

Vielen Dank nochmal für deine Antwort und Hilfe.

Grüße MaganUser
 
Da steckt das Problem in meinen Augen aber eher im Ablauf und nicht in robocopy. Tools wie robocopy und Co können natürlich nicht beliebig an individuelle Anforderungen angepasst werden, wobei robocopy da für Windows-Verhältnisse schon seinesgleichen sucht.

Natürlich kannst du auch in einer Batch-Datei über alle Quellverzeichnisse iterieren und dann innerhalb dieser Verzeichnisse jeweils einmal robocopy laufen lassen.

Wie sinnvoll das ist, musst du selbst wissen. So wie ich das verstanden habe sollen die Quellverzeichnisse ja gerade leer gemacht werden, daher verstehe ich nicht so recht warum du auf zuvor-leere Verzeichnisse filtern willst.

Wirklich sinnvoll klingt das aber offen gestanden nicht. Entweder verschiebt oder kopiert man. Beides irgendwie miteinander verhackstückt und individuell gefiltert, klingt nach einem fehlerbehafteten Prozess, der schon bei der Erzeugung der Quelldaten beginnt.
 
Hallo,

Wenn ich mich 100 % darauf verlassen könnte das immer alle Quelldaten erzeugt werden dann brauche ich die Daten nur zu verschieben.
Aber es gibt keine 100 %. Deswegen wollte ich vorher schauen welche Ordner leer sind.
Aber OK ich werde nochmal alles überdenken.

Vielen Dank für deine Unterstützung.

Grüße MagnaUser
 
Zurück
Oben