pepano
Goto Top

Ordnerstruktur durchsuchen, Dateien hinzufügen

Hallo, habe hier ein Problem und erhoffe mir Rat von euch.
Ausgangslage: Es gibt einen Ordner (Bsp: D:\Hauptordner\) mit massig Unterordnern dessen Enden je eine PDF-Datei enthalten. Bsp: 00001.pdf bis 99999.pdf

In einem anderen Ordner (Bsp: C:\Bilder\) habe ich dazu passende Bilddateien Bsp: 00001.jpg bis 99999.jpg zentral liegen.

Nun wünsche ich mir eine Stapelverarbeitung die die einzelnen jpg Dateien aus C:\Bilder in den passenden D:\Hauptordner\Unterordner.... kopiert, und zwar in den Unterodner wo gleichnamige pdf liegt. Die Routine müsste also erst den Hauptordner und Unterordner durchsuchen bis sie die richtige Stelle findet.

Ist so etwas machbar?

Content-Key: 519037

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

Printed on: May 9, 2024 at 18:05 o'clock

Mitglied: 141965
141965 Nov 26, 2019 updated at 17:45:54 (UTC)
Goto Top
Powershell als Beispiel:
$folderpdf = 'D:\Root'  
$folderImages = 'D:\Images'  
Get-ChildItem $folderpdf -File -Recurse -Filter *.pdf | %{
    Get-ChildItem $folderImages -File -Filter "$($_.BaseName).jpg" | copy-item -Destination $_.DirectoryName -Verbose  
}
Member: 0x32f1
Solution 0x32f1 Nov 26, 2019 updated at 18:10:11 (UTC)
Goto Top
Ob das jetzt besonders sauber oder performant ist, sei mal dahingestellt, aber es sollte wenigstens funktionieren:

Ordnerstruktur vorher
C:.
├───jpgs
│       001.jpg
│       002.jpg
│       003.jpg
│
└───pdfs
    ├───001
    │       001.pdf
    │
    ├───asdf
    │       002.pdf
    │
    └───xyz
            003.pdf

Script:
@ECHO OFF
SET pdfRoot=C:\temp\0x32f1\pdfs
SET jpgRoot=C:\temp\0x32f1\jpgs
SETLOCAL EnableDelayedExpansion
FOR /F "delims=" %%a IN ('DIR /b "%jpgRoot%\*.jpg"') DO (  
  SET jpgName=%%a
  SET pdfName=!jpgName:~0,-4!.pdf
  FOR /F "delims=" %%b IN ('DIR /b /s "%pdfRoot%\!pdfName!"') DO (  
    SET pdfPath=%%b
    SET pdfPath=!pdfPath:~0,-7!
    MOVE "%jpgRoot%\!jpgName!" "!pdfPath!"  
  )
)

Ordnerstruktur nachher:
C:.
├───jpgs
└───pdfs
    ├───001
    │       001.jpg
    │       001.pdf
    │
    ├───asdf
    │       002.jpg
    │       002.pdf
    │
    └───xyz
            003.jpg
            003.pdf

Hinweise:
- Arbeite nicht ohne Datensicherung
- Setze im Script oben deine Verzeichnisse ein
- Meine Dateinamen waren siebenstellig (Dateiname + Punkt + Extension). Wenn deine länger sind, ändere das im Script ("(bei "SET pdfPath=!pdfPath:~0,-7!")"
- Für alle jpgs in deinem Ordner wird ein PDF mit identischem Namen gesucht. Sollte es Duplikate geben, wird das Bild zum ersten Match verschoben und für den Rest hagelt es Fehlermeldungen.
Member: pepano
pepano Nov 27, 2019 at 07:05:20 (UTC)
Goto Top
Wow, super - vielen Dank für die ausführliche Erklärung. Ich werde es heute ausprobieren.
Member: pepano
pepano Nov 27, 2019 at 10:06:23 (UTC)
Goto Top
So, das Skipt funktioniert PERFEKT - Vielen lieben Dank!