Zum Inhalt springen

Batch Datei erstellen Dateiname auslesen


Stebbo

Empfohlene Beiträge

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von User\Root
Hatte zu wenige Variablen eingegeben.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. :rolleyes:

Hättest du viell. noch eine andere Idee?

Danke dir für deine bemühungen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok eine Fotostrecke:

post-31269-14430448427767_thumb.jpg

Dort ist auch die Batch Drinn.

So sieht das Ergebnis aus.

post-31269-14430448428181_thumb.jpg

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? :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Wochen später...

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

)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...