Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch zum verschieben von Dateien nach Datum und erstellung von Ordner

Frage Entwicklung Batch & Shell

Mitglied: satori

satori (Level 1) - Jetzt verbinden

27.03.2010, aktualisiert 18.10.2012, 24013 Aufrufe, 10 Kommentare

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 auf server2/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ß
Mitglied: bastla
27.03.2010 um 14:43 Uhr
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:
01.
@echo off & setlocal 
02.
set "Quelle=\\server1\verzeichnis1" 
03.
set "Ziel=\\server2\verzeichnis-xyz" 
04.
set "Typ=.wav" 
05.
 
06.
set "Datum=%date%" 
07.
for /f "tokens=1-3 delims=." %%a in ("%Datum%") do set "ZielOrdner=%Ziel%\%%c-%%b-%%a" 
08.
md "%Zielordner%" 2>nul 
09.
 
10.
pushd "%Quelle%" 
11.
for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Datum%" echo move "%%d" "%Zielordner%" 
12.
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
Bitte warten ..
Mitglied: reXen96
27.03.2010 um 20:41 Uhr
hoffe das hilft ... ganz simples script

01.
@echo off 
02.
 
03.
 
04.
set datum=%Date% 
05.
set tag=%Datum:~0,2% 
06.
set mon=%Datum:~3,2% 
07.
set jahr=%Datum:~6,4% 
08.
 
09.
set "quelcopy=\\server1\verzeichnis1\ *.*"  
10.
set "zielcopy=\\server2\verzeichnis1\%mon%-%tag%-%jahr%\*.*"  
11.
 
12.
xcopy "%quelcopy%" "%zielcopy%" /D:%mon%-%tag%-%jahr% /E /Y /I 
13.
 
14.
pause

gruss rexen
Bitte warten ..
Mitglied: bastla
27.03.2010 um 20:48 Uhr
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
Bitte warten ..
Mitglied: nightwishler
27.03.2010 um 22:52 Uhr
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
Bitte warten ..
Mitglied: bastla
27.03.2010 um 23:23 Uhr
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: satori
29.03.2010 um 08:32 Uhr
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?
Bitte warten ..
Mitglied: bastla
29.03.2010 um 10:07 Uhr
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
Bitte warten ..
Mitglied: mantus
24.10.2011 um 10:07 Uhr
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!
Bitte warten ..
Mitglied: bastla
24.10.2011, aktualisiert 18.10.2012
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
Bitte warten ..
Mitglied: mantus
24.10.2011 um 12:10 Uhr
Hallo bastla!
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!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...