Dateien nach Erstellungsdatum in ein Unterordner verschieben
Hallo,
gerne möchte ich Dateien in Unterordner verschieben.
Dazu habe ich einmal eine Batch geschrieben. Als Hilfe habe ich einen Beitrag aus diesem Forum genommen in dem nur ein bestimmtes Datum genutzt wurde. Ich möchte aber alle Dateien aus dem Quellordner nehmen und diese in den entsprechenden Unterordnern verschieben. Diese Unterordner sollen vorher erzeugt werden.
Das habe ich so gelöst:
Im ersten Test hat der Code prima funktioniert. Ich habe PDF- Dateien erzeugt und er hat diese wegsortiert.
Aber als ich dann ältere Dateien zusammen gesucht habe, wurden die alle in den Unterordner für den aktuellen Monat geschoben.
Mir wurde also in %%a nicht das Erzeugungsdatum der Datei geliefert, sondern nur das aktuelle Tagesdatum. Aber in %%d habe ich schon den korrekten Namen gefunden. Nun weiß ich nicht, warum das %%a und das %%d nicht von der selben Datei ist? hat jemand eine Idee?
[Edit Biber] Codeformatierung. [/Edit]
gerne möchte ich Dateien in Unterordner verschieben.
Dazu habe ich einmal eine Batch geschrieben. Als Hilfe habe ich einen Beitrag aus diesem Forum genommen in dem nur ein bestimmtes Datum genutzt wurde. Ich möchte aber alle Dateien aus dem Quellordner nehmen und diese in den entsprechenden Unterordnern verschieben. Diese Unterordner sollen vorher erzeugt werden.
Das habe ich so gelöst:
rem @echo off
setlocal
set "Quelle=J:\Export"
set "Ziel=J:\Export"
set "Typ=.pdf"
pushd "%Quelle%"
for /F "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do (
for /F "tokens=1-3 delims=." %%e in (%%a) do (
md %Ziel%\%%g
md %Ziel%\%%g\%%g-%%f
move %Quelle%\%%d %Ziel%\%%g\%%g-%%f\%%d
)
)
popd
Aber als ich dann ältere Dateien zusammen gesucht habe, wurden die alle in den Unterordner für den aktuellen Monat geschoben.
Mir wurde also in %%a nicht das Erzeugungsdatum der Datei geliefert, sondern nur das aktuelle Tagesdatum. Aber in %%d habe ich schon den korrekten Namen gefunden. Nun weiß ich nicht, warum das %%a und das %%d nicht von der selben Datei ist? hat jemand eine Idee?
[Edit Biber] Codeformatierung. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 182115
Url: https://administrator.de/forum/dateien-nach-erstellungsdatum-in-ein-unterordner-verschieben-182115.html
Ausgedruckt am: 18.05.2025 um 17:05 Uhr
5 Kommentare
Neuester Kommentar
Hallo AD-Mike!
Das ließe sich auch mit nur einer Schleife der Art
abhandeln - dann würden auch die fehlenden Anführungszeichen um %%a herum sich nicht auswirken ... 
Das erste "
Ach ja - bei "
Grüße
bastla
P.S.: Wenn Du "" verwendet hättest (lässt sich aber ja noch nachholen), wäre das Ganze leichter lesbar ...
Das ließe sich auch mit nur einer Schleife der Art
for /f "tokens=1-5* delims=. " %%a in ('dir /a-d /-c /tc *%Typ%^|findstr /i /e "\%Typ%"') do (
Das erste "
md
" ist unnötig - im Pfad benötigte Ordner (in Deinem Fall %%g) werden automatisch erzeugt ...Ach ja - bei "
move
" genügt es, als Ziel den Ordnernamen anzugeben, und wenn Du vorher ohnehin schon den Quellordner zum aktuellen Ordner gemacht hast, kannst Du bei der Quelle die Ordnerangabe gleich weglassen.Grüße
bastla
P.S.: Wenn Du "" verwendet hättest (lässt sich aber ja noch nachholen), wäre das Ganze leichter lesbar ...
Hallo AD-Mike!
- dadurch werden alle Bilschirmausgaben (auch Fehlermeldungen) in die Datei "Verschieben.txt" geschrieben ...
Grüße
bastla
ein paar Kontrollausgaben tätigen...
Du hast doch ohnehin kein "echo off
" aktiv - damit solltest Du ja den Ablauf nachvollziehen können. Noch besser geht das, wenn Du den Batch (unter der Annahme, dass er "Verschieben.cmd" hieße) etwa so startest:Verschieben.cmd >Verschieben.txt 2>&1
Grüße
bastla
Hallo AD-Mike!
Das geschilderte Verhalten hinsichtlich "
Bezüglich
Grüße
bastla
Interessant ist auch noch, dass nur Dateien verschoben werden, die keine Leerzeichen im Namen haben. Aber das habe ich mit einigen Anführungszeichen hinbekommen.
2 sollten schon gereicht haben (in meinem Ansatz für "%%f
") ...Das geschilderte Verhalten hinsichtlich "
/tc
" klingt abenteuerlich ... Bezüglich
Dateien, die größer sind als 999.999 sonst nicht mit kopiert.
ist Dir vermutlich der Schalter "/-c
" entgangen - dadurch werden nämlich bei der Angabe der Größe in Bytes keine Tausendertrennzeichen (also Punkte, und die dienen ja als Delimiter) angezeigt ...Also bleibe ich doch lieber bei meiner Variante
Mach nur ...Grüße
bastla