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 Befehl zum Sortieren von Dateien nach ihrem erstellungsdatum gesucht

Frage Entwicklung Batch & Shell

Mitglied: Dragonrb

Dragonrb (Level 1) - Jetzt verbinden

26.02.2007, aktualisiert 27.02.2007, 8557 Aufrufe, 11 Kommentare

Hallo Leute,

Ich bräucht eure Hilfe.

Und zwar suche ich einen Batch Befehl (.bat Datei) der bestimmte Dateien aus einem Sammelordner nach ihrem Datum sortiert, also genaugenommen nach ihrem Monat (Erstellungsdatum).
Diese Dateien sollen dann in einen Ordner kopiert werden, welcher Unterordner mit allen Monaten enthält.
Also z.b. eine Datei die am 04.02.2007 erstellt wurde soll dann erkannt werden und in den Ordner C:\2007\02 verschoben werden, eine Datei die am 04.05.2007 erstellt wurde wird dann in den Ordner C:\2007\05 kopiert.

Ich habe leider bisher null Erfahrung was solche batch Dateien anbetrifft, also es wäre sehr nett, wenn ihr es so unkompliziert wie möglich formulieren könntet ^^

Ich habe das Forum schon vor erstellen des Beitrages durchsucht nur leider habe ich keinen Beitrag gefunden, den ich verstanden habe und konnte daher auch nicht sicher sein ob es sich um das gleiche Problem wie meines handelt.

Vielen Dank im Vorraus...

Mit freundlichen Grüßen Dragon
Mitglied: Dani
26.02.2007 um 10:39 Uhr
Moin,
so müsst es gehen. Vielleicht kann man das einfacher machen, aber so müsst es gehen:
01.
@echo off 
02.
 
03.
for /f "tokens=1,4* delims= " %%a in ('dir /od "D:\Musik"') do ( 
04.
	for /f "tokens=1,2,3 delims=." %%i in ('echo %%a') do ( 
05.
		move "D:\Musik\%%b%%c" "C:\%%k-%%j" /y 
06.
07.
)
Ich habe es nicht mit verschieben probiert, sondern nur mit eine ECHO Ausgabe.


Grüße
Dani
Bitte warten ..
Mitglied: Biber
26.02.2007 um 10:45 Uhr
Moin Dragonrb,

willkommen im Forum.

Für Deinen Plan brauchst Du eigentlich nur einen neuen Zielordner und zwei Anweisungen vom CMD-Prompt.
Da es erstmal eine einmalige (und keine wiederkehrende) Aufgabe ist, würde ich keinen Batch dafür zusammentrümmern, sondern mich langsam und interaktiv daran herantrauen.

Den ersten Befehl brauchst Du, um alle nötigen Unterverzeichnisse anzulegen, den zweiten zum Verschieben der Dateien.

Annahmen:
- du kennst das Quell-Verzeichnis, aus dem Du die Daten verschieben/wegsortieren willst
- einen sinnvollen Namen für das Zielverzeichnis kennst Du auch.

Dann am CMD-Prompt (Beispiel:Quelle ist "f:\temp"; Ziel ist "X:\SortiertesGeraffel"):
01.
----zuerst die Ordner anlegen---- 
02.
(=10:37:32  D:\temp=) 
03.
>for %i in (f:\temp\*.*) do @for /f "tokens=2-3 delims=. " %a in ("%~ti") do @if not exist x:\SortiertesGeraffel\%b\%a <b>@ECHO</b> md x:\SortiertesGeraffel\%b\%a 
04.
md x:\SortiertesGeraffel\2006\08 
05.
md x:\SortiertesGeraffel\2006\09 
06.
md x:\SortiertesGeraffel\2006\10 
07.
md x:\SortiertesGeraffel\2006\12 
08.
..... 
09.
--- dann die Dateien MOVEn... 
10.
for %i in (f:\temp\*.*) do @for /f "tokens=2-3 delims=. " %a in ("%~ti") do <b>@ECHO</b> move "%~fi" x:\SortiertesGeraffel\%b\%a\*.* 
11.
move "f:\temp\Q0rdner.txt" x:\SortiertesGeraffel\2006\08\*.* 
12.
move "f:\temp\Sourcepath.txt" x:\SortiertesGeraffel\2006\10\*.* 
13.
move "f:\temp\hbci201a.doc" x:\SortiertesGeraffel\2006\12\*.* 
14.
....
Beide Beispielzeilen enthalten ein @Echo, welches das gefahrlose Testen/Simulieren ermöglicht.
Dieses "@Echo" muss weggelassen werden, wenn die Anweisung das gewünschte Ergebnis anzeigt und die Anweisung wirklich ausgeführt werden soll.

HTH
Biber
Bitte warten ..
Mitglied: Dragonrb
26.02.2007 um 13:12 Uhr
WOW!

Vielen Dank für die schnellen Antworten und thx @ Biber für die einfach Formulierung.

Ich werd das gleich mal probieren sieht aber schon sehr gut aus...

Also ich meld mich gleich wieder...

Mit freundlichen Grüßen Dragon

Edit:

So
ich habe das mal ausprobiert, nur leider bekomme ich schon direkt beim ersten befehl eine Fehlermeldung bei der Syntax

>for %i in (f:\temp\*.*) do @for /f "tokens=2-3 delims=. " %a in ("%~ti") do @if not exist x:\SortiertesGeraffel\%b\%a @ECHO md x:\SortiertesGeraffel\%b\%a

Sagt er mir: Der Befehl "%i" ist entweder falsch geschrieben oder konnte nicht gefunden werden. ???
fehlt mir da vielleicht irgendein zusätzliches pluggin mit batch befehlen oder so?

Ich arbeite an einer win2000 Pro Maschine...

Und meine zweite frage wäre zu deinerm zweiten Befehl:

for %i in (f:\temp\*.*) do @for /f "tokens=2-3 delims=. " %a in ("%~ti") do @ECHO move "%~fi" x:\SortiertesGeraffel\%b\%a\*.*
move "f:\temp\Q0rdner.txt" x:\SortiertesGeraffel\2006\08\*.*
move "f:\temp\Sourcepath.txt" x:\SortiertesGeraffel\2006\10\*.*
move "f:\temp\hbci201a.doc" x:\SortiertesGeraffel\2006\12\*.*

Die 3 Beispiele die du drunter stehn hast, werden diese Dateien (z.b. QOrdner.txt) von der oberen Zeile selbst erkannt, oder hast du die manuell eingefügt? Weil ich bräuchte ein Programm, dass halt aus einem Quellordner einfach alle dateien einliest und diese dann sortiert nach datum auf (wie du schon so schön geschrieben hast) die Unterordner in \SortiertesGeraffel verteilt...

Nochmals Danke für die Hilfe^^

Mit freundlichen Grüßen Dragon
Bitte warten ..
Mitglied: Dragonrb
26.02.2007 um 14:48 Uhr
Edit ;) Sry 4 Doppelpost

So hab nach ein bisschen grübeln und der hilfe eines netten Kollegen endlich mein denkfehler gefunden

Du hast ja nur die Befehle kopiert und zusätzlich haste mir die Echo ausgabe mitkopiert das hat mich erstmal ins grübeln gebracht ;)

Und glaube du hast auch beim ersten Befehl das > mitkopiert das hat mich auch am anfang bissl gewundert habs aber dann einfach weggemacht und die Laufwerksbuchstaben angepasst und siehe da es klappt perfekt ;)



Also zumindest, wenn ich die beiden Befehle in die kommandozeile hintereinander einfüge und seperat ausführe

Gibts denn auch ne möglich die beiden Befehle jetzt noch in eine Ausführbare datei zu importieren, die ich dann z.b. in den autostrat schieben könnte? Sodass er die routine bei jedem start einmal abfährt?

Nochmals Danke für die Hilfe...

Mit freundlichen Grüßen Dragon
Bitte warten ..
Mitglied: Biber
26.02.2007 um 16:06 Uhr
Sorry, Dragonrb,

das hätte ich natürlich auch deutlicher machen können...

Ja, das Größer-(">")-Zeichen sollte den CMD-Prompt andeuten und nicht mit eingegeben werden.
Ja, die Zeilen darunter sind die Outputzeilen, die in meiner Testumgebung rausfallen würden.


Ja, die beiden Zeilen könntest Du natürlich auch, statt die so per Copy & Paste am CMD-Prompt einzufügen, in eine Bat-Datei schreiben, wenn die beiden Einzelzeilen im Test denn das machen, was Du willst.

Einzige wesentliche Änderung: im Batch sind vor den Zählvariablen %i, %j usw zwei Prozentzeichen statt einem am CMD-Prompt.

Als Batch könnte das Ganze sinngemäß (das heißt: Deine Pfade und Laufwerke sind natürlich nicht drin, die kennst nur Du) so aussehen:

01.
::---------snipp SortierMirInMonatsOrdner.bat ---- 
02.
@echo off & setlocal 
03.
::---ab hier anpassen 
04.
Set "QuellDirFiles=F:\Temp\*.*" 
05.
Set "ZielDirRoot=X:\SortiertesGeraffel" 
06.
::---bis hier anpassen 
07.
:: Monatsordner anlegen, wenn nötig 
08.
for %%i in (%QuellDirFiles%) do  ( 
09.
      for /f "tokens=2-3 delims=. " %%a in ("%%~ti") do @if not exist "%ZielDirRoot%\%%b\%%a"  md "%ZielDirRoot%\%%b\%%a" 
10.
11.
:: --- dann die Dateien MOVEn... 
12.
for %%i in (%QuellDirFiles%) do @for /f "tokens=2-3 delims=. " %%a in ("%%~ti") do move "%%~fi" "%ZielDirRoot%\%b\%a\*.*" 
13.
::---------snapp SortierMirInMonatsOrdner.bat ----
-oder etwas kürzer:
01.
::---------snipp SortierMirInMonatsOrdner.bat ---- 
02.
@echo off & setlocal 
03.
::---ab hier anpassen 
04.
Set "QuellDirFiles=F:\Temp\*.*" 
05.
Set "ZielDirRoot=X:\SortiertesGeraffel" 
06.
::---bis hier anpassen 
07.
:: Monatsordner anlegen, wenn nötig und dann die Dateien MOVEn... 
08.
for %%i in (%QuellDirFiles%) do  for /f "tokens=2-3 delims=. " %%a in ("%%~ti") do ( 
09.
         if not exist "%ZielDirRoot%\%%b\%%a"  md "%ZielDirRoot%\%%b\%%a" 
10.
         move "%%~fi" "%ZielDirRoot%\%b\%a\*.*" 
11.
12.
::---------snipp SortierMirInMonatsOrdner.bat ----
[Ungetestete Skizze]

Kannst Du Dir in den Autostart legen oder auf den Desktop... aber halt erst, wenn es getestet ist und fliegt.

Gruss
Biber
Bitte warten ..
Mitglied: Dragonrb
26.02.2007 um 16:23 Uhr
Wow ^^ Das ist perfekt Biber ;)

So in etwa habe ich es auch noch ein wenig verfeinert habs eben mal mit den Variablen und den 2x %% Versucht klappt einwandfrei, auf dem wege nochmals danke für die tipps ;)

Bin jetzt grad dabei die datei mit en paar rems zu versehn damit sie en bissl durchsichtiger wird...

aber bisher schon super arbeit...

Also dann wünsch ich noch en schönen feierabend....

Viele liebe Grüße

Dragonrb

Edit:

Bestünde eigentlich auch die Möglichkeit Die Variablen so zu ändern, dass im Zielordner dann später z.b. 2007\Januar oder 2007\Februar drinnesteht?
Irgendwie blick ich durch die Variablensetzung noch nich so ganz durch ;)
Bitte warten ..
Mitglied: Biber
26.02.2007 um 17:33 Uhr
Moin Dragonrb,

Bestünde eigentlich auch die Möglichkeit...
Och, Batchskripte bieten eigentlich fast unbegrenzte Möglichkeiten. Meiner Erfahrung nach...
Und zu dieser Übersetzung von eher tristen Datumswerten in etwas flüssig Lesbares könnte ich stundenlang erzählen.

Hab ich sogar schon getan hier im Forum - einiges davon davon steht z.B. in dem Tutorial Workshop Batch for Runaways Part III Datums- und Zeitvariablen im Batch,
dem zweiten Link unten in "Beiträge im gleichen Bereich".

Wenn Du Dir das mal gemütlich mit einer Tüte Erdnussflips und einem Glas nicht zu fruchtigen Dornfelder reinziehst, solltest Du danach in der Lage sein,
- FOR-Anweisungen mit mehreren Zählvariablen mit spielerischer Leichtigkeit ineinander zu schrauben,
- die Monatswerte "01" bis "12" durch die Monatsnamen "Jänner" bis "Dezember" zu ersetzen,
- Deine Musterlösung hier zu veröffentlichen und
- einen grünen Haken an diesen Thread zu heften.

Würde mir eine größere Freude bereiten, als Dir hier eine maßgeschneiderte Fertiglösung unterzujubeln, die Du dann nur teilweise nachvollziehen kannst.

Vorschlag: Versuch es einmal anhand dieses Tutorials zu lösen... sollte es dann klemmen, findest Du natürlich hier weitere Hilfe (zur Selbsthilfe).

Gruss
Biber
Bitte warten ..
Mitglied: Dragonrb
27.02.2007 um 10:24 Uhr
Hallo Biber

Schonmal Danke für den Tipp und die vorige Hilfe.

Das Programm funktioniert an sich so auch schon einwandfrei und erfüllt auch seinen Zweck. Ich poste das grad mal hier rein so wies jetzt endgültig aussieht:

01.
:: Dies ist eine .bat Datei zum Scannen eines Quellordners nach Dateien mit unterschiedlichem Erstellungsdatum um Sie einheitlich zu sortieren.  
02.
:: Diese Dateien werden dann geordnet nach dem Monat Ihrer Erstellung und dem dazugehörigen Jahr in einen seperaten Ordner namens "Akalf" verschoben.  
03.
 
04.
@Echo off & Setlocal 
05.
 
06.
:: Festlegen der Variablen für  Quell und Zielverzeichniss... 
07.
 
08.
Set "QuellDirFiles=C:\Temp\*.*" 
09.
Set "ZielDirRoot=C:\Akalf" 
10.
 
11.
:: Erstellen der Ordner Anhand des Erstellungsdatums aller Dateien... 
12.
 
13.
for %%i in (%QuellDirFiles%) do  ( 
14.
      	for /f "tokens=2-3 delims=. " %%a in ("%%~ti") do @if not exist "%ZielDirRoot%\20%%b\%%a"  md "%ZielDirRoot%\20%%b\%%a" 
15.
16.
 
17.
:: Verschieben dieser Dateien... 
18.
 
19.
for %%i in (%QuellDirFiles%) do @for /f "tokens=2-3 delims=. " %%a in ("%%~ti") do move "%%~fi" "%ZielDirRoot%\20%%b\%%a"
Soweit ein top progrämmchen ;)

Hab mir auch jetzt deinen Guide durchgelesen und auch weiter unten in den Kommentaren die Erläuterung zur Auflösung der Monatsdaten in Schriftform gefunden.
Habs jetzt versucht in meinen Code zu implementieren, nur habe ich ihn leider danach nicht mehr zum laufen gebracht. Ich weiss leider nicht genau welche variablen ich in deinem Beispiel ändern muss um sie in meinen Code zu implementieren, vielleicht kannste mir da nochmal en kleinen Schubs in die richtige Richtung geben ;)

So far

Mit freundlichen Grüßen Dragonrb
Bitte warten ..
Mitglied: Biber
27.02.2007 um 11:31 Uhr
Moin Dragonrb,

eine Skizze wäre so:
01.
:: Dies ist eine .bat Datei zum Scannen eines Quellordners nach Dateien mit unterschiedlichem Erstellungsdatum um Sie einheitlich zu sortieren.  
02.
:: Diese Dateien werden dann geordnet nach dem Monat Ihrer Erstellung und dem dazugehörigen Jahr in einen seperaten Ordner namens "Akalf" verschoben.  
03.
 
04.
@Echo off & Setlocal 
05.
 
06.
:: Festlegen der Variablen für  Quell und Zielverzeichniss... 
07.
 
08.
Set "QuellDirFiles=C:\Temp\*.*" 
09.
Set "ZielDirRoot=C:\Akalf" 
10.
 
11.
:: Erstellen der Ordner Anhand des Erstellungsdatums aller Dateien... 
12.
 
13.
for %%i in (%QuellDirFiles%) do  ( 
14.
    for /f "tokens=2-3 delims=. " %%a in ("%%~ti") do Call :Move2XLatedMonthFolder "%%~fi" %%b %%a  
15.
16.
goto :eof 
17.
 
18.
:Move2XLatedMonthFolder  
19.
REM Parameter %1="FQ-Quelldateiname"  
20.
REM Parameter %2: JJ-Jahr; Parameter3:MM-Monat 
21.
     
22.
If [%3]==[01] set "cMonat=Januar" 
23.
If [%3]==[02] set "cMonat=Februar" 
24.
If [%3]==[03] set "cMonat=Märzen" 
25.
If [%3]==[04] set "cMonat=April" 
26.
If [%3]==[05] set "cMonat=Meiomei" 
27.
If [%3]==[06] set "cMonat=Juno" 
28.
If [%3]==[07] set "cMonat=Juli" 
29.
If [%3]==[08] set "cMonat=August" 
30.
If [%3]==[09] set "cMonat=September" 
31.
If [%3]==[10] set "cMonat=Oktober" 
32.
If [%3]==[11] set "cMonat=November" 
33.
If [%3]==[12] set "cMonat=Dezember" 
34.
 
35.
 
36.
if not exist "%ZielDirRoot%\20%2\%cMonat%"  md "%ZielDirRoot%\20%2\%cMonat%" 
37.
 
38.
:: Verschieben dieser Dateien... 
39.
 
40.
move %1 "%ZielDirRoot%\20%2\%cMonat%" 
41.
goto :eof
[ungetestete Skizze]

Gruss Biber
Bitte warten ..
Mitglied: Dragonrb
27.02.2007 um 12:28 Uhr
Hallo Biber,


OmeiOmei... Da wär ich ja echt nich drauf gekommen. Ich danke dir auf jeden Fall für deine Zeit.

Ich habs mal so getestet und es funktioniert einwandfrei...

Werd jetzt auf jeden Fall weiterhin en bisschen mit Batch rumspielen is echt intressant aber bis ich wirklich alles verstanden hab geht bestimmt noch einige Zeit ins Land ;)

*Häckchen mach*

Mit freundlichen Grüßen Dragonrb

Edit: Öhm? Biber vielleicht noch eine kleine Sache, wie kann ich meinen Beitrag als gelöst abhaken ?^^
Bitte warten ..
Mitglied: Biber
27.02.2007 um 13:11 Uhr
*lacht*

@Dragonrb
Beitrag als gelöst markieren/Grünes Häkchen setzen

- Anmelden
- unterhalb der Frage, mit der Du diesen Beitrag begonnen hast, den Button "Editieren" drücken
- Im aufgehenden Fensterchen unterhalb des Beitragstext-Editors das Kontrollkästchen "Dieser Beitrag gillt als gelöst" aktivieren/ankreuzen.

[Und wenn es der Beitragsersteller auf "Gelöst" gesetzt hat, kommt irgendwann der Mod/die Modöse/das Model und setzt den Beitrag nach dem selben Muster auf "Geschlossen".]

Schönen Tag auch Dir
Biber
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...