Batch zum verschieben von Dateien nach Datum und erstellung von Ordner
Dateien nach Datum ausschneiden, Verzeichnis anlegen, Dateien einfügen und das per Batch!
Hallo Zusammen,
ich möchte gerne folgendes tun. Ich möchte von einem bestimmten Verzeichnis Dateien mit bestimmtem Datum kopieren und in ein anderen, durch die batch selbst erstelltes und nach datum benannten Ordner verschieben.
Sprich:
Geht hierbei um bestimmte Voicefile.
Ich möchte also auf dem Quellverzeichnis die Dateien mit heutigem Datum auf einen anderen Server verschieben, die Batch sollte dann einen neuen Ordner erstellen welcher nach dem jeweiligen Datum benannt wird. Dies soll automatisiert jede nacht erfolgen.
Befinden sich zum beispiel auf server1/verzeichnis1/ dateien welche am 27.03.2010 erstellt wurden sollen diese aufserver2/verzeichnis-xyz/ verschoben werden. Allerdings soll vorher ein Ordner angelegt werden welcher eben als namen das aktuelle Datum hat. Also //server2/verzeichnis-xyz/2010-03-27/ als beispiel.
Ist das möglich?
Könnt ihr mir da weiterhelfen?
Das Datum muss sich natürlich bei der erstellung der Ordnung täglich ändern. Das ganze möchte ich dann als geplanten Task oder so jede Nacht ausführen lassen.
Vielen Dank im Voraus.
Gruß
Hallo Zusammen,
ich möchte gerne folgendes tun. Ich möchte von einem bestimmten Verzeichnis Dateien mit bestimmtem Datum kopieren und in ein anderen, durch die batch selbst erstelltes und nach datum benannten Ordner verschieben.
Sprich:
Geht hierbei um bestimmte Voicefile.
Ich möchte also auf dem Quellverzeichnis die Dateien mit heutigem Datum auf einen anderen Server verschieben, die Batch sollte dann einen neuen Ordner erstellen welcher nach dem jeweiligen Datum benannt wird. Dies soll automatisiert jede nacht erfolgen.
Befinden sich zum beispiel auf server1/verzeichnis1/ dateien welche am 27.03.2010 erstellt wurden sollen diese aufserver2/verzeichnis-xyz/ verschoben werden. Allerdings soll vorher ein Ordner angelegt werden welcher eben als namen das aktuelle Datum hat. Also //server2/verzeichnis-xyz/2010-03-27/ als beispiel.
Ist das möglich?
Könnt ihr mir da weiterhelfen?
Das Datum muss sich natürlich bei der erstellung der Ordnung täglich ändern. Das ganze möchte ich dann als geplanten Task oder so jede Nacht ausführen lassen.
Vielen Dank im Voraus.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 139282
Url: https://administrator.de/contentid/139282
Ausgedruckt am: 05.11.2024 um 16:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo satori!
Nicht dass es so viel mehr Aufwand wäre, die Datumsprüfung auf "heute erstellt" (einfacher, und vermutlich mit dem selben Ergebnis, wäre "heute geändert") durchzuführen - aber wenn Du den Batch jeden Tag um 23:59 laufen lässt, sollten eigentlich (es wird ja verschoben) ohnehin nur heute erstellte Dateien im Quellordner vorhanden sein ...
Anyhow - versuch es mit diesem (total ungetesteten) Ansatz:
Zum entspannten Testen steht vor dem "
Grüße
bastla
Nicht dass es so viel mehr Aufwand wäre, die Datumsprüfung auf "heute erstellt" (einfacher, und vermutlich mit dem selben Ergebnis, wäre "heute geändert") durchzuführen - aber wenn Du den Batch jeden Tag um 23:59 laufen lässt, sollten eigentlich (es wird ja verschoben) ohnehin nur heute erstellte Dateien im Quellordner vorhanden sein ...
Anyhow - versuch es mit diesem (total ungetesteten) Ansatz:
@echo off & setlocal
set "Quelle=\\server1\verzeichnis1"
set "Ziel=\\server2\verzeichnis-xyz"
set "Typ=.wav"
set "Datum=%date%"
for /f "tokens=1-3 delims=." %%a in ("%Datum%") do set "ZielOrdner=%Ziel%\%%c-%%b-%%a"
md "%Zielordner%" 2>nul
pushd "%Quelle%"
for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Datum%" echo move "%%d" "%Zielordner%"
popd
move
" noch ein "echo
" - so werden die Verschiebe-Befehle vorerst nur angezeigt - erst nach dem Entfernen dieses "echo
" wird tatsächlich verschoben ...Grüße
bastla
hoffe das hilft ... ganz simples script
gruss rexen
@echo off
set datum=%Date%
set tag=%Datum:~0,2%
set mon=%Datum:~3,2%
set jahr=%Datum:~6,4%
set "quelcopy=\\server1\verzeichnis1\ *.*"
set "zielcopy=\\server2\verzeichnis1\%mon%-%tag%-%jahr%\*.*"
xcopy "%quelcopy%" "%zielcopy%" /D:%mon%-%tag%-%jahr% /E /Y /I
pause
gruss rexen
Hallo reXen96 und willkommen im Forum!
Gute Idee - und auch ausbaufähig in Richtung des eigentlich benötigten Verschiebens, indem Du mit dem Parameter "/L" zunächst eine Liste der betroffenen Dateien erstellst und diese dann per "
(Dass bei dieser Vorgangsweise nicht das Erstell-, sondern das Änderungsdatum berücksichtigt wird, dürfte vermutlich kein größeres Problem sein.)
Grüße
bastla
Gute Idee - und auch ausbaufähig in Richtung des eigentlich benötigten Verschiebens, indem Du mit dem Parameter "/L" zunächst eine Liste der betroffenen Dateien erstellst und diese dann per "
for /f
" durchgehst ...(Dass bei dieser Vorgangsweise nicht das Erstell-, sondern das Änderungsdatum berücksichtigt wird, dürfte vermutlich kein größeres Problem sein.)
Grüße
bastla
hi bastla, du hast nicht zufällig die lust 2 deiner codezeilen für mich aufzuschlüßeln?
bin "fortgeschrittener anfänger" was batch angeht, aber mit diesem fot /f token delims brech ich mir immer einen ab
for /f "tokens=1-3 delims=." %%a in ("%Datum%") do set "ZielOrdner=%Ziel%\%%c-%%b-%%a"
for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Datum%" echo move "%%d" "%Zielordner%"
gruß und dank im voraus
bin "fortgeschrittener anfänger" was batch angeht, aber mit diesem fot /f token delims brech ich mir immer einen ab
for /f "tokens=1-3 delims=." %%a in ("%Datum%") do set "ZielOrdner=%Ziel%\%%c-%%b-%%a"
for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Datum%" echo move "%%d" "%Zielordner%"
gruß und dank im voraus
Hallo nightwishler!
Dazu wird an den Punkten getrennt ("delims" kommt von "delimiter" = Trennzeichen), wobei die Bestandteile ("tokens") 1 bis 3 benötigt werden.
Für das erste Token ("27") wird die Variable "%%a" vorgegeben, für die weiteren dadurch automatisch "%%b" (Wert = "03") und %%c (für "2010") verwendet.
Der Rest der Zeile sollte eigentlich klar sein ...
Durch das Filtern mit "
Eine derartige Zeile könnte dann zB so aussehen:
Mit "
Damit kann dann für jede einzelne Datei durch den Vergleich von "%%a" mit dem bereits vorher gespeicherten aktuellen Datum (%Datum%) entschieden werden, ob sie heute erstellt wurde - wenn ja, wird die Datei verschoben (bzw der "
Bei weiteren Fragen: fragen ...
Grüße
bastla
hi bastla, du hast nicht zufällig die lust 2 deiner codezeilen für mich aufzuschlüsseln?
Aber ja doch ...for /f "tokens=1-3 delims=." %%a in ("%Datum%") do set "ZielOrdner=%Ziel%\%%c-%%b-%%a"
Ziel ist es hier, den Inhalt von %Datum% (zB "27.03.2010") auseinanderzunehmen und als "2010-03-27" mit dem vorgegebenen %Ziel% zum Zielordner neu zusammenzusetzen.Dazu wird an den Punkten getrennt ("delims" kommt von "delimiter" = Trennzeichen), wobei die Bestandteile ("tokens") 1 bis 3 benötigt werden.
Für das erste Token ("27") wird die Variable "%%a" vorgegeben, für die weiteren dadurch automatisch "%%b" (Wert = "03") und %%c (für "2010") verwendet.
Der Rest der Zeile sollte eigentlich klar sein ...
for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Datum%" echo move "%%d" "%Zielordner%"
Hier sollen zunächst die passenden "dir
"-Zeilen ermittelt werden (durch "/a-d" werden sicherheitshalber Ordner von der Anzeige ausgeschlossen, "/tc" legt fest, dass Datum und Uhrzeit der Erstellung verwendet werden sollen).Durch das Filtern mit "
findstr
" werden die Kopf- und Fußzeilen der "dir
"-Ausgabe eliminiert, indem nur Zeilen weiterverwendet werden, die auf (im konkreten Beispiel) ".wav" (= Inhalt von %Typ%) enden ("/e").Eine derartige Zeile könnte dann zB so aussehen:
27.03.2010 14:29 18.638 Nur ein Test.wav
for /f
" wird in diesem Fall anhand des Default-Trennzeichens "Leerzeichen" (mehrere aufeinander folgende "delims" werden nur als eines gezählt) in die Tokens 1-3 und den Rest (= *; da der Dateiname Leerzeichen enthalten kann, soll alles nach dem dritten Teil als Einheit behandelt und nicht weiter aufgeteilt werden) zerlegt, sodass sich in "%%a" das Erstellungs-Datum, in "%%b" die Uhrzeit, in "%%c" die Dateigröße und in "%%d" der Dateiname befinden.Damit kann dann für jede einzelne Datei durch den Vergleich von "%%a" mit dem bereits vorher gespeicherten aktuellen Datum (%Datum%) entschieden werden, ob sie heute erstellt wurde - wenn ja, wird die Datei verschoben (bzw der "
move
"-Befehl angezeigt).Bei weiteren Fragen: fragen ...
Grüße
bastla
Hallo!
Auch wenn der Post alt ist, stehe ich vor einem ähnlichen Problem und wollte keinen neuen Thread lostreten
Es geht bei mir um die Bereinigung und Datenarchivierung mehrerer Altsysteme.
Hier müssen Daten (primär Grafiken) aus zig Unerverzeichnissen nach Datum sortiert werden, sprich:
Das Scrip sollte für jedes Erstelldatum ein eigenes Verzeichnis erstellen (Mit dem Erstelldatum) und dann die entprechenden Grafiken dorthin verschieben.
Ich hoffe Ihr habt da eine Idee... ich komme einfach nicht weiter. Habe noch nie mit Schleifen gearbeitet und habe keine Ahnung wie ich das Erstelldatum einer Datei
ausgeben kann...
Danke für eure Hilfe!
Auch wenn der Post alt ist, stehe ich vor einem ähnlichen Problem und wollte keinen neuen Thread lostreten
Es geht bei mir um die Bereinigung und Datenarchivierung mehrerer Altsysteme.
Hier müssen Daten (primär Grafiken) aus zig Unerverzeichnissen nach Datum sortiert werden, sprich:
Das Scrip sollte für jedes Erstelldatum ein eigenes Verzeichnis erstellen (Mit dem Erstelldatum) und dann die entprechenden Grafiken dorthin verschieben.
Ich hoffe Ihr habt da eine Idee... ich komme einfach nicht weiter. Habe noch nie mit Schleifen gearbeitet und habe keine Ahnung wie ich das Erstelldatum einer Datei
ausgeben kann...
Danke für eure Hilfe!
Hallo mantus und willkommen im Forum!
Es spricht grundsätzlich nix gegen das Erstellen eines neuen Threads - aber wenn Du schon einen alten als Grundlage nimmst, dann vielleicht eher diesen ...
Grüße
bastla
Es spricht grundsätzlich nix gegen das Erstellen eines neuen Threads - aber wenn Du schon einen alten als Grundlage nimmst, dann vielleicht eher diesen ...
Grüße
bastla