satori
Goto Top

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ß

Content-ID: 139282

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

bastla
bastla 27.03.2010 um 14:43:14 Uhr
Goto Top
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:
@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
Zum entspannten Testen steht vor dem "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
reXen96
reXen96 27.03.2010 um 20:41:16 Uhr
Goto Top
hoffe das hilft ... ganz simples script

@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
bastla
bastla 27.03.2010 um 20:48:49 Uhr
Goto Top
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 "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
neueradmuser
neueradmuser 27.03.2010 um 22:52:27 Uhr
Goto Top
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 face-sad

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
bastla
bastla 27.03.2010 um 23:23:21 Uhr
Goto Top
Hallo nightwishler!
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
Mit "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 ... face-wink

Grüße
bastla
satori
satori 29.03.2010 um 08:32:20 Uhr
Goto Top
Hallo guten Morgen,

ein herzliches Danke schön an alle die mir das Grundgerüst geschickt habe, ich habe das ganze nun getestet indem ich 3 txt Dateien in den quellordner gezogen habe. Ich habe nun die batch wie folgt angepasst, habe den Server mit dem Quellverzeichnis hinterlegt und als format eben txt angegeben. Außerdem natürlich noch das Zielverzeichnis hinterlegt.

Er erstellt mir nen Ordner mit dem aktuellen Datum im Zielordner, allerdings kopiert er mich keine Dateien rein.
Weder mit der Batch von Bastla noch mit der von rexen96, wobei in der batch vom bastla wenn ich eine pause ans ende setze und ich mir batch dann anschaue, er wohl die dateien erkennt. Sie werden zumindest aufgelistet aber verschoben werden sie nicht!

Hat da jemand Rat?
bastla
bastla 29.03.2010 um 10:07:34 Uhr
Goto Top
Hallo satori!
Sie werden zumindest aufgelistet aber verschoben werden sie nicht!
Das "echo" in Zeile 11 hast Du schon entfernt?

Solange das nämlich vor dem "move" steht, wird nicht verschoben, sondern nur angezeigt, welche Befehle ausgeführt würden ...

Grüße
bastla
mantus
mantus 24.10.2011 um 10:07:49 Uhr
Goto Top
Hallo!

Auch wenn der Post alt ist, stehe ich vor einem ähnlichen Problem und wollte keinen neuen Thread lostreten face-smile

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!
bastla
bastla 24.10.2011, aktualisiert am 18.10.2012 um 18:48:52 Uhr
Goto Top
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
mantus
mantus 24.10.2011 um 12:10:54 Uhr
Goto Top
Hallo bastla! face-smile
vielen Dank, genau sowas suchte ich. Keine Ahnung warum ich den nicht gleich gefunden habe...
Dann sucht man schon und übersieht doch das Wesentliche..

Nochmals Danke!