Batch zum verschieben von Ordnern anhand des Erstellungsdatums
Hallo,
ich würde gerne mittels Batch Ordner verschieben, und zwar in neue Ordner die dem Monat der Erstellung der Ursprungsordner entsprechen.
Beispiel
Quelle
F:\Test\ABC1.RAW vom 01.05.2016
F:\Test\ABC2.RAW vom 10.06.2017
F:\Test\ABC3.RAW vom 15.07.2017
ABC*.RAW ist hier ein Ordner und keine Datei
Ziel
F:\Test2\2016\05\ABC1.RAW
F:\Test2\2017\06\ABC2.RAW
F:\Test2\2017\07\ABC3.RAW
Bisheriger Ansatz
%%f gibt mir das Datum (DD.MM.YYYY) aus
%%g gibt mir den Ordnernamen aus "ABC1.RAW"
01.05.2016 ABC1.RAW
Da ich das Datum selektiert nach Jahr und Monat brauche, muss ich dies noch auflösen.
Leider scheitert es dann aber schon am setzen der Variabeln.
echo %Datum% %Ordner% liefert
"3 Bytes"
was ich mir nicht erklären kann.
Ich bin was das Programmieren angeht Anfänger.
Habe zwar schon ein paar größere Excel Makros geschrieben, mit AHK einiges automatisiert und auch an einem Raspberry Pi mit Phyton eigenständig gearbeitet, aber ich bin leider immer wieder auf Hilfe angewiesen da ich eben noch große Lücken habe. Isdt halt doch nur Hobby und immer problembasiert.
Mein Script stammt zum Teil aus diesem Beitrag:
Batch zum verschieben von Dateien nach Datum und erstellung von Ordner
Was ich leider auch noch nicht umsetzen konnte ist das Filtern der Kopf- und Fußzeile der DIR Ausgabe. Vor allem die Fußzeilen machen wir probleme.
Auch dieser umfangreiche Artikel hat mir da leider nicht weiter geholfen.
https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-komm ...
Es wäre schön wenn ihr mir unter die Arme greifen würdet. Danke.
Gruß
Joker
ich würde gerne mittels Batch Ordner verschieben, und zwar in neue Ordner die dem Monat der Erstellung der Ursprungsordner entsprechen.
Beispiel
Quelle
F:\Test\ABC1.RAW vom 01.05.2016
F:\Test\ABC2.RAW vom 10.06.2017
F:\Test\ABC3.RAW vom 15.07.2017
ABC*.RAW ist hier ein Ordner und keine Datei
Ziel
F:\Test2\2016\05\ABC1.RAW
F:\Test2\2017\06\ABC2.RAW
F:\Test2\2017\07\ABC3.RAW
Bisheriger Ansatz
echo off
FOR /f "skip=7 tokens=1,4" %%f IN ('dir /tc F:\Test') DO (
echo %%f %%g
SET "Datum=%%f"
SET "Ordner=%%g"
echo %Datum% %Ordner%
FOR /f "tokens=1-3 delims=." %%a IN ("%Datum%") DO ECHO MOVE F:\Test\%Ordner%\*.* F:\Test2\%%c\%%b\%Ordner%
)
%%f gibt mir das Datum (DD.MM.YYYY) aus
%%g gibt mir den Ordnernamen aus "ABC1.RAW"
01.05.2016 ABC1.RAW
Da ich das Datum selektiert nach Jahr und Monat brauche, muss ich dies noch auflösen.
Leider scheitert es dann aber schon am setzen der Variabeln.
echo %Datum% %Ordner% liefert
"3 Bytes"
was ich mir nicht erklären kann.
Ich bin was das Programmieren angeht Anfänger.
Habe zwar schon ein paar größere Excel Makros geschrieben, mit AHK einiges automatisiert und auch an einem Raspberry Pi mit Phyton eigenständig gearbeitet, aber ich bin leider immer wieder auf Hilfe angewiesen da ich eben noch große Lücken habe. Isdt halt doch nur Hobby und immer problembasiert.
Mein Script stammt zum Teil aus diesem Beitrag:
Batch zum verschieben von Dateien nach Datum und erstellung von Ordner
Was ich leider auch noch nicht umsetzen konnte ist das Filtern der Kopf- und Fußzeile der DIR Ausgabe. Vor allem die Fußzeilen machen wir probleme.
Auch dieser umfangreiche Artikel hat mir da leider nicht weiter geholfen.
https://www.axel-hahn.de/batch/helferlein-und-tabellen/alle-windows-komm ...
Es wäre schön wenn ihr mir unter die Arme greifen würdet. Danke.
Gruß
Joker
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 343593
Url: https://administrator.de/contentid/343593
Ausgedruckt am: 24.11.2024 um 21:11 Uhr
5 Kommentare
Neuester Kommentar
Die Option /b für DIR zu verwenden könnte einfacher sein, ebenso die entsprechenden Modifiers der FOR Variablen zu nutzen, aber naja geht auch so.
Was nicht funktioniert, ist, eine normale Umgebungsvariable zu ihrem neuen Wert zu expandieren, wenn sie innerhalb desselben Klammerausdrucks verändert wurde. Dafür gibt es die verzögerte Variablenerweiterung. Aber das brauchst du hier alles nicht, weil du direkt mit den FOR Variablen arbeiten kannst.
Grüße
rubberman
Was nicht funktioniert, ist, eine normale Umgebungsvariable zu ihrem neuen Wert zu expandieren, wenn sie innerhalb desselben Klammerausdrucks verändert wurde. Dafür gibt es die verzögerte Variablenerweiterung. Aber das brauchst du hier alles nicht, weil du direkt mit den FOR Variablen arbeiten kannst.
@echo off &setlocal
for /f "tokens=1,3*" %%i in ('dir /ad /tc^|findstr /rc:"\<<DIR>\>"^|findstr /rvc:"\<\.\.*\>"') do for /f "tokens=2,3 delims=." %%l in ("%%i") do (
echo %%m %%l "%%k"
)
pause
rubberman
Und mit Powershell löst man sowas heutzutage so
Gruß
$source = 'F:\Test'
$target = 'F:\Test2'
gci $source | ?{$_.PSIsContainer} | group {$_.CreationTime.toString('yyyy\\MM')} | %{
$f = "$target\$($_.Name)"
if(!(Test-Path $f)){md $f -Force | out-null}
$_.Group | move-item -Destination $f -recurse -force
}
Gruß
Leider bin ich mir nicht sicher wo ich jetzt meinen Quellpfad eintragen muss.
Warum? Ist doch auch nicht anders als vorher. Ungetestet:@echo off &setlocal
set "src=F:\Test"
set "dst=F:\Test2"
for /f "tokens=1,3*" %%i in ('dir /ad /tc "%src%"^|findstr /rc:"\<<DIR>\>"^|findstr /rvc:"\<\.\.*\>"') do for /f "tokens=2,3 delims=." %%l in ("%%i") do (
2>nul md "%dst%\%%m\%%l"
move "%src%\%%k\*.*" "%dst%\%%m\%%l\"
)
Die Strings "\<<DIR>\>" und "\<\.\.*\>" sagen mir leider nichts.
Sind aber wohl zum filtern der Liste gedacht.
Du hast doch nun bereits auf die TechNet Seite mit der Referenz verlinkt Ja, ist zum Filtern. Auch wenn Option /ad des DIR Kommandos nur Verzeichnisse ausgibt, so könnten das aber auch Junctions sein. Der erste Filter ist also für Zeilen die die Zeichenfolge Sind aber wohl zum filtern der Liste gedacht.
<DIR>
enthalten (3.Spalte). Die Ausgabe enthält nun aber in der 4. Spalte noch .
und ..
für dasselbe bzw. das übergeordnete Verzeichnis, die mit Option /v aussortiert werden.Grüße
rubberman