Dateinamen auslesen, zwischenspeichern, kürzen und als Ordnernamen benutzen
Hiho,
ich hab mich in letzter Zeit nen bissel mit Batch beschäftigt und hab nun folgende Aufgabe:
Ich soll aus einem Ordner, der mehrere Dateien (glaub PDFs) enthält diese gruppieren, also die Dateien mit den entsprechenden Namen in den zugehörigen neuen Ordner zu verschieben.
D.h. es wird jeden Tag eine neue Datei hinzukommen und die hat in etwa die Namenstruktur wie 2008_04_06_blubb.pdf.
Die Aktuellest, also neueste Datei von dem Tag soll in dem Standardordner bleiben und erst dann verschoben werden, bis eine andere neue Datei auftaucht.
Habe mir das so gedacht, dass man den Dateinamen ausliest, dann halt in ner Variable zwischenspeichert und dann irgendwie kürzt, also dass dann nur zb: "2008_04" übrig bleibt, was man dann als Ordnernamen verwendet für den jeweiligen Monat.
Der Ordner mit dem Namen wird dann erstellt und die älteren Dateien mit den Daten werden dann dort hinein verschoben.
Ich bin mit dem File schon soweit, dass ich die Dateien auslesen und die neueste Filtern kann, aber kann halt nicht den Dateinamen kürzen...
Danke schonmal
Mfg
Bredack
ich hab mich in letzter Zeit nen bissel mit Batch beschäftigt und hab nun folgende Aufgabe:
Ich soll aus einem Ordner, der mehrere Dateien (glaub PDFs) enthält diese gruppieren, also die Dateien mit den entsprechenden Namen in den zugehörigen neuen Ordner zu verschieben.
D.h. es wird jeden Tag eine neue Datei hinzukommen und die hat in etwa die Namenstruktur wie 2008_04_06_blubb.pdf.
Die Aktuellest, also neueste Datei von dem Tag soll in dem Standardordner bleiben und erst dann verschoben werden, bis eine andere neue Datei auftaucht.
Habe mir das so gedacht, dass man den Dateinamen ausliest, dann halt in ner Variable zwischenspeichert und dann irgendwie kürzt, also dass dann nur zb: "2008_04" übrig bleibt, was man dann als Ordnernamen verwendet für den jeweiligen Monat.
Der Ordner mit dem Namen wird dann erstellt und die älteren Dateien mit den Daten werden dann dort hinein verschoben.
Ich bin mit dem File schon soweit, dass ich die Dateien auslesen und die neueste Filtern kann, aber kann halt nicht den Dateinamen kürzen...
Danke schonmal
Mfg
Bredack
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 87209
Url: https://administrator.de/forum/dateinamen-auslesen-zwischenspeichern-kuerzen-und-als-ordnernamen-benutzen-87209.html
Ausgedruckt am: 03.05.2025 um 10:05 Uhr
13 Kommentare
Neuester Kommentar
Moin bredack,
vielleicht hilft Dir folgende Demo-Zeile am CMD-Prompt nach zweimaligem Lesen:
[Eingabezeile hat ein ">" als Prompt; Zeile 2 ist Ausgabe]
In diesem Beispiel würden alle Dateien mit dem Muster "d:\temp\20??_*.pdf" angefasst, die Dateinamen zerlegt mit einem angenommenen Trennzeichen "_" und daraus ein Unterverzeichnisname aus den ersten zwei Tokens zusammengebraten.
Die Ermittlung/Filterung nach "neuester Datei" ist nicht Bestandteil der Zeile.
Grüße
Biber
vielleicht hilft Dir folgende Demo-Zeile am CMD-Prompt nach zweimaligem Lesen:
>for %a in (d:\temp\20??_*.pdf) do @for /f "delims=_ tokens=1-2" %i in ("%~nxa") do @echo move %a %~dpa%i_%j\
move d:\temp\2008_04_06_blubb.pdf d:\temp\2008_04\
In diesem Beispiel würden alle Dateien mit dem Muster "d:\temp\20??_*.pdf" angefasst, die Dateinamen zerlegt mit einem angenommenen Trennzeichen "_" und daraus ein Unterverzeichnisname aus den ersten zwei Tokens zusammengebraten.
Die Ermittlung/Filterung nach "neuester Datei" ist nicht Bestandteil der Zeile.
Grüße
Biber
Moin Bredack,
Windows-Standard ist der Prompt "C:\Dokumente und Einstellungen\User\Eigene Dateien>" bzw $P$G (Anzeige Lw/Pfad gefolgt von einem Größer-Zeichen.
Bei mir ist es nur das Größerzeichen.
Mit %~ni bekomme ich den (Datei-)Namen der Variablen %i, mit %~pi den Pfad, mit %~di den Drive etc...
Es würde sich nur mit der ersten FOR-Anweisung bei Dir ergeben.
Spiel mal (nach Überfliegen der FOR /?-Hilfe) zwei Minuten mit den beiden FOR-Anweisungen einzeln am CMD-Prompt. Dann wirds klarer.
Wenn nicht...melde Dich.
Grüße
Biber
wozu is denn das ">"? Wenn ich es weglasse passiert gar nix, wenn es bleibt wird der Pfad nich gefunden.
Das ">" NICHT mit eingeben; es gehört einfach mit zu meinem CMD-Prompt.Windows-Standard ist der Prompt "C:\Dokumente und Einstellungen\User\Eigene Dateien>" bzw $P$G (Anzeige Lw/Pfad gefolgt von einem Größer-Zeichen.
Bei mir ist es nur das Größerzeichen.
was macht das ("%~nxa") und das hinter dem move?
die Auflösung von dynamischen Variablen wird in der Hilfe zu FOR ("FOR /?" am CMD-Prompt eingeben) auf der letzten Seite sehr gut beschrieben.Mit %~ni bekomme ich den (Datei-)Namen der Variablen %i, mit %~pi den Pfad, mit %~di den Drive etc...
%a is der dateiname?
%a ist die Laufvariable %a, die gefüllt wird mit allen %a's aus "FOR %a in (H:\20??_*.txt)"Es würde sich nur mit der ersten FOR-Anweisung bei Dir ergeben.
>for %a in (H:\20??_*.txt) do @echo %a
H:\2008_04_06_blubb.pdf
....(ggf. weitere Dateien)
%~dpa
"nur" Drive und Path von %a --->"H:\"%i 1. Token?
%j 2. Token?
Jepp. Da ich bei %i anfange zu zählen (FOR /F ...%i in .."), werden alle sich ergebenden "Folgevariablen" alphabetisch hochgezählt...%i, %j, %k....%j 2. Token?
Spiel mal (nach Überfliegen der FOR /?-Hilfe) zwei Minuten mit den beiden FOR-Anweisungen einzeln am CMD-Prompt. Dann wirds klarer.
Wenn nicht...melde Dich.
Grüße
Biber
nur die Ruhe, Bredack,
wenn ich irgendwo schreibe, "...am CMD-Prompt..", dann bedeutet das das Abfeuern der entsprechenden Halbzeile vom CMD-Prompt.
Dann haben alle dynamischen Variablen EIN Prozentzeichen (%i, %j, %a,...)
Damit kannst Du alles erstmal testen.
Wenn es klappt (oder "wenn es denn wider Erwarten jemals klappen sollte", wie wir Biber sagen), dann kannst Du es in einer Batchdatei dauerhaft der Nachwelt erhalten.
Erst dann bekommen die Laufvariablen ihr zweites Prozentzeichen (%%i, %%j,...%%~dpa..)
Sozusagen als Prüfsiegel "ohne größere Beanstandungen trocken getestet".
Bitte teste es erstmal am Prompt.
Grüße
Biber
wenn ich irgendwo schreibe, "...am CMD-Prompt..", dann bedeutet das das Abfeuern der entsprechenden Halbzeile vom CMD-Prompt.
Dann haben alle dynamischen Variablen EIN Prozentzeichen (%i, %j, %a,...)
Damit kannst Du alles erstmal testen.
Wenn es klappt (oder "wenn es denn wider Erwarten jemals klappen sollte", wie wir Biber sagen), dann kannst Du es in einer Batchdatei dauerhaft der Nachwelt erhalten.
Erst dann bekommen die Laufvariablen ihr zweites Prozentzeichen (%%i, %%j,...%%~dpa..)
Sozusagen als Prüfsiegel "ohne größere Beanstandungen trocken getestet".
Bitte teste es erstmal am Prompt.
Grüße
Biber
Hallo Bredack!
Übrigens könntest Du beim Posten Deine Batch-Zeilen zwischen -Tags stellen ...
Grüße
bastla
Es legt an dem "%~dpa" genausowenig gehn %~da, fa oder pa.
Konsequenter Weise ist natürlich auch bei "%~dpa" ein zweites "%"-Zeichen fällig ...Muss es bis jetz über das ('dir') Lösen
Das "dir" kannst Du Dir schenken, wenn Du, so wie Biber oben, nur ein "for " ohne "/f" verwendest.Übrigens könntest Du beim Posten Deine Batch-Zeilen zwischen -Tags stellen ...
Grüße
bastla
Hallo Bredack!
Bei nochmaligem Hinsehen war mir auch schon aufgefallen, dass es nicht beim Pfad klemmt ...
Ändere die Zeile
auf
Du bekommst dadurch die einzelnen Namensbestandteile in die Variablen %%i (Jahr), %%j (Monat) und %%k (Rest ab Tag) - diese kannst Du wieder mit "%%i_%%j_%%k" zusammensetzen.
Grüße
bastla
Bei nochmaligem Hinsehen war mir auch schon aufgefallen, dass es nicht beim Pfad klemmt ...
Ändere die Zeile
for /F "delims=_ tokens=1-2" %%i in ('dir /b %Filter%') do (
for /F "delims=_ tokens=1-2*" %%i in ('dir /b %Filter%') do (
Grüße
bastla