kayes73
Goto Top

Bilddateien kopieren und neu einsortieren

Hallo zusammen!

ich möchte folgendes bewerkstelligen:

In einer Verzeichnisstruktur liegen Bilddateien

Testumgebung/Projekte/2020/20_Projektname/Bilder/3015_Test_0001_00022.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3015_Test_0001_00023.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3015_Test_0001_00024.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3015_Test_0001_00025.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3015_Test_0002_00001.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3015_Test_0002_00002.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3015_Test_0002_00003.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3016_Test_0002_00001.jpg
Testumgebung/Projekte/2020/20_Projektname/Bilder/3016_Test_0002_00002.jpg

Diese Bilddateien sollen nun folgendermaßen über einen Kopierbefehl in ein Archiv einsortiert werden

Testumgebung/Archiv/3015_VerzeichnisA/0001/00022.jpg
Testumgebung/Archiv/3015_VerzeichnisA/0001/00023.jpg
Testumgebung/Archiv/3015_VerzeichnisA/0001/00024.jpg
Testumgebung/Archiv/3015_VerzeichnisA/0001/00025.jpg
Testumgebung/Archiv/3015_VerzeichnisA/0002/00001.jpg
Testumgebung/Archiv/3015_VerzeichnisA/0002/00002.jpg
Testumgebung/Archiv/3015_VerzeichnisA/0002/00003.jpg
Testumgebung/Archiv/3016_VerzeichnisB/0002/00001.jpg
Testumgebung/Archiv/3016_VerzeichnisB/0002/00002.jpg

Da ich mehrere Jahrgänge habe, würde ich den Teil /2020/20_Projektname in /*/20_* ändern.
Die Frage ist, wie ich die Dateinamen aufsplitten und in Variablen umwandeln kann??
Am liebsten alles in einer bat

Content-ID: 652556

Url: https://administrator.de/contentid/652556

Ausgedruckt am: 19.11.2024 um 15:11 Uhr

rubberman
rubberman 16.02.2021 aktualisiert um 21:12:51 Uhr
Goto Top
Zitat von @kayes73:
Die Frage ist, wie ich die Dateinamen aufsplitten und in Variablen umwandeln kann??

Brauchst keine extra Variablen. Das kannst du mit den FOR Variablen erledigen.
Suchen und Tokenizing:
for /d %%i in ("Testumgebung\Projekte\*") do for /d %%j in ("%%i\20_*") do for %%k in ("%%j\Bilder\*.jpg") do (  
  for /f "tokens=1-4 delims=_" %%l in ("%%~nk") do echo %%l %%m %%n %%o  
)

Sollte das "Test" in deinen Dateinamen aber real noch Unterstriche in variabler Anzahl enthalten, ist Schluss mit Batch und du must dir eine Sprache suchen, die Regex unterstützt.

Steffen
kayes73
kayes73 18.02.2021 um 17:21:45 Uhr
Goto Top
Danke schon einmal.
Das funktioniert und er gibt in l, m, n und o die entsprechenden Werte aus.
Wie kann ich diese denn jetzt am einfachsten in einen Kopierbefehl einbauen?
rubberman
rubberman 18.02.2021 aktualisiert um 18:50:19 Uhr
Goto Top
Quick and dirty, Verzeichnis erstellen und Dateien mit neuen Namen kopieren.

for /d %%i in ("Testumgebung\Projekte\*") do for /d %%j in ("%%i\20_*") do for %%k in ("%%j\Bilder\*.jpg") do (  
  for /f "tokens=1-4 delims=_" %%l in ("%%~nk") do (  
    2>nul md "Testumgebung\Archiv\%%l\%%n"  
    >nul copy "%%k" "Testumgebung\Archiv\%%l\%%n\%%o%%~xk"  
  )
)
"Dirty" weil ich MD einfach auf Fehler laufen lasse, falls das Verzeichnis bereits existiert. Etwas sauberer wäre so was wie ...
if not exist "foo\bar" md "foo\bar"
Ob du an dein 3015 und 3016 noch irgendwas anhängen willst, wie in deinem Beispiel oben, musst du selbst wissen.

Steffen