Stebbo Geschrieben 23. Juli 2009 Teilen Geschrieben 23. Juli 2009 Hallo zusammen, und zwar stehe ich vor folgendem Problem: Ich würde gerne eine Batch Datei programmieren, die Dateien (Bsp.: IABOSCH_02.07.2009.506) In den richtigen Ordner verschiebt. Und zwar sollen 12 Ordner erstellt werden. Januar - Dezember. Die Batch Datei sollte so funktionieren, dass zB am Oben genannten Bsp. geschaut wird von welchem Monat die Datei stammt. Also 02.07.2009 -> ab in den Juli Ordner. ICh habe das Prog. schon soweit dass das Erstellungsdatum an den Dateinamen angehängt wird. ICh bekomme es aber nicht auf die Reihe, dass die Dateien in die richtigen Ordner verschoben werden. Viel. die 07. in eine Varable speichern und alle mit dem Monat 07. in Juli Ordner verschieben, weiß leider überhaupt nicht wie der Quelltext dazu aussehen könnte. Bitte um Hilfe. Vielen Dank im Vorraus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 23. Juli 2009 Teilen Geschrieben 23. Juli 2009 (bearbeitet) es wäre möglich mit der Zeile: dir /b iabosch*.*>files.log eine Datei Files.log anzulegen, in der alle Dateien des Ordners beginnend mit iabosch als Namen hinterlegt werden. Die nutzt du dann als Basis für den nächsten Befehl: For /F "delims=. Tokens=1,2*" %%i in (Files.log) do ( If %%j==01 move %%i.%%j.%%k.%%l ..\Januar If %%j==02 move %%i.%%j.%%k.%%l ..\Februar If %%j==03 move %%i.%%j.%%k.%%l ..\Maerz If %%j==04 move %%i.%%j.%%k.%%l ..\April If %%j==05 move %%i.%%j.%%k.%%l ..\Mai If %%j==06 move %%i.%%j.%%k.%%l ..\Juni If %%j==07 move %%i.%%j.%%k.%%l ..\Juli If %%j==08 move %%i.%%j.%%k.%%l ..\August If %%j==09 move %%i.%%j.%%k.%%l ..\September If %%j==10 move %%i.%%j.%%k.%%l ..\Oktober If %%j==11 move %%i.%%j.%%k.%%l ..\November If %%j==12 move %%i.%%j.%%k.%%l ..\Dezember ) Der Befehl liest die files.log komplett zeile für zeile durch. Er trennt dabei die Zeile in Bruchstücke auf, welche durch die Punkte getrennt sind (mit delims=.) Du benötigst für deine aufgabe das zweite Bruchstück( Tokens=1,2*). Da das erste Bruchstück %%i ist und du das zweite willst nimmst du %%j. Für die kopierfunktion benötigst du jedoch den kompletten String: der wird aus %%i.%%j.%%k.%%l zusammengesetzt. Dieser Qualitätscode wurde bereits getestet und funktioniert. Die Ordner waren in dem Fall im Verzeichnis Darüber angelegt. Also: D: \Quellordner der iabosch-Dateien mit dem Script \Januar \Februar ... beachte das bei dem zusammengestzen String so viele Punkte wie in der Datei sein müssen. Bei mehr musst du eine Variable mehr eingeben bzw. bei weniger eine Variable weniger. Bearbeitet 23. Juli 2009 von User\Root Hatte zu wenige Variablen eingegeben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Stebbo Geschrieben 23. Juli 2009 Autor Teilen Geschrieben 23. Juli 2009 Viele Dank für die schnelle Antwort! Es klappt noch nicht wirklich und zwar vorab: dient das ganze einer Archivierung. Ich habe einen Quellordner (*\WIN-DFUE\EMPFANG.ARC) in diesem liegen sehr viele Dateien und kommen täglich neue dazu. Aus diesem Ordner hol ich mir die Dateien um kopier sie nach *\WIN-DFUE\ARCHIV\EMPFANG.ARC dabei knüpfe ich das Erstelldatum an den eigentlichen Dateinamen an. Die Dateien im ARCHIV Ordner sowie im Quellordner heißen alle unterschiedlich und haben auch andere Dateiendungen. zB.: (IABOSCH_16.07.2009.508) oder auch (IADATIS_13.05.2009.656) das einzige was gleich ist zumindest von der Schreibweise her, ist das Datum was durch ein _ beginnt. So, die "Monats" Ordner würde ich gerne auch in *\WIN-DFUE\ARCHIV\EMPFANG.ARC Verzeichnis haben. Mein bisheriger Quelltxt: @echo off & setlocal set "Quelle=C:\SUBELKE\WIN-DFUE\EMPFANG.ARC" set "Archiv=C:\SUBELKE\WIN-DFUE\ARCHIV\EMPFANG.ARC" if not exist "%Archiv%" md "%Archiv%" for /f "skip=5 tokens=1,3*" %%i in ('dir /a-d /tw "%Quelle%\*.*"^|findstr /v "Datei(en) Verzeichnis(se),"') do copy "%Quelle%\%%k" "%Archiv%\%%~nk_%%i%%~xk">nul Weiß nicht ob das weiterhilft. Ich habe leider nicht allzu viel Ahnung von Batch Dateien und weiß auch nicht ob das sinnvoll ist was ich geschrieben habe aber es funktioniert soweit Viell. kannst du mir ja so weiterhelfen, würde mich sehr freuen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 23. Juli 2009 Teilen Geschrieben 23. Juli 2009 Was für Dateinamen gibt es denn algemein in deinem Quellverzeichnis? Heissen alle dort zu findenden und zu archivierenden Dateien *7 Buchstaben*_*Datum*.*3Ziffern"? Wenn ja, dann reicht das anpassen der IF-Parameters und des DIR-Filters. Wenn du z.B. in dem Verzeichnis C:\SUBELKE\WIN-DFUE\EMPFANG.ARC in der Eingabeaufforderung dir /b *_*>files.log eingibst, sind dann nur die zu verschiebenden Dateien in der Files.log? Wenn ja, dann wird dir /b *_*>files.log die erste Zeile deines Scripts. zum Anpassen des Scriptes die Zeile:If %%j==01 move %%i.%%j.%%k.%%l ..\Januar umschrieben zu If %%j==01 move %%i.%%j.%%k.%%l ..\Archiv\empfang.arc\Monat Das muss halt für alle Monate sein. Das Script wird dann in deinem Quellverziechnis ausgeführt, und alles wird gut. !Mach das aber bitte nicht im Produktiven System um es zu testen! Kopier dir deinen Quellordner manuell in eine Testumgebung und Erstelle unter ...Archiv\Empfang vorher die 12 Monatsordner. Dein Script überspringt in der For-schleife die ersten 5 Zeilen und schreibt die Rückmeldung in den Papierkorb. Wenn jetzt aber Dateien die kopiert werden sollen an den ersten fünf stellen stehen, werden die nicht berücksichtigt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Stebbo Geschrieben 23. Juli 2009 Autor Teilen Geschrieben 23. Juli 2009 Die Dateien sind wie folgt aufgebaut: *beliebig viele Buchstaben*_*Datum*.*3Ziffern" Wenn ich in dem von dir genanntem Verz. dir /b *_*>files.log eingebe, kommt ->Datei nicht gefunden Funktioniert irgendwie immer noch nicht... Bin echt am Verzweifeln :eek Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 23. Juli 2009 Teilen Geschrieben 23. Juli 2009 Hmm. Also mit Testdateien bei mir funktioniert es sogar recht gut, sofern man im richtigen verzeichnis ist( war aus versehen in meinen Dateien anstatt im Testfolder). mit dir /b *_*>files.log schreibt er bei mir im Testfolder alle dateien auf, welche im Dateinamen ein _ enthalten. bist du mit der Eingabeaufforderung in dem Quellverzeichnis? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Stebbo Geschrieben 24. Juli 2009 Autor Teilen Geschrieben 24. Juli 2009 WAs verstehst du unter Quellverzeichnis? Das ARCHIV verzeichnis wird ja erst erstellt wenn ich mein Progrämmchen durchlaufen lasse. Es sollte ja im optimalen FAll alles auf einmal passieren, d.h. er soll die dateien aus Empfang.arc in den Archiv Ordner kopieren, das Erstellungsdatum an den Dateinamen anknüpfen (soweit bin ich ja schon mit meinem Prog. siehe Beitrag oben) und danach die Dateien im Archiv Ordner in den entsprechenden MOnats Ordner verschieben. Ich kann das Programm also nicht in dem Ordner */Archiv/Empfang.arc durchlaufen lassen. es müsste alles auf einmal funktionieren und wenn ich deinen Teil an meinen anknüpfe funktioniert das irgendwie nicht. Hättest du viell. noch eine andere Idee? Danke dir für deine bemühungen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 24. Juli 2009 Teilen Geschrieben 24. Juli 2009 Ok eine Fotostrecke: Dort ist auch die Batch Drinn. So sieht das Ergebnis aus. Und das ist die Batch: dir /b *_* >files.log For /F "delims=. Tokens=1,2*" %%i in (Files.log) do ( If %%j==01 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Januar If %%j==02 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Februar If %%j==03 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Maerz If %%j==04 move %%i.%%j.%%k ..\Archiv\Empfang.arc\April If %%j==05 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Mai If %%j==06 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Juni If %%j==07 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Juli If %%j==08 move %%i.%%j.%%k ..\Archiv\Empfang.arc\August If %%j==09 move %%i.%%j.%%k ..\Archiv\Empfang.arc\September If %%j==10 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Oktober If %%j==11 move %%i.%%j.%%k ..\Archiv\Empfang.arc\November If %%j==12 move %%i.%%j.%%k ..\Archiv\Empfang.arc\Dezember ) del files.log Oder habe ich etwas falsch verstanden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
User-Root Geschrieben 11. August 2009 Teilen Geschrieben 11. August 2009 geschönte Fassung ohne lästiges log-file echo off cls For /F "delims=. Tokens=1-4" %%i in ('dir /b *_*') do ( If %%j==01 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Januar If %%j==02 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Februar If %%j==03 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Maerz If %%j==04 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\April If %%j==05 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Mai If %%j==06 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Juni If %%j==07 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Juli If %%j==08 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\August If %%j==09 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\September If %%j==10 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Oktober If %%j==11 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\November If %%j==12 move %%i.%%j.%%k.%%l ..\Archiv\Empfang.arc\Dezember ) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.