naik0n
Goto Top

Batch ID aus Dateiname auslesen und Ordner erstellen

Hallo zusammen,

Ich habe gerade ein wenig in der Datenbank geforstet und konnte nicht wirklich etwas finden wonach ich eigendlich suche.

Folgendes Problem habe ich.

Es befinden sich lauter Files in einem Ordner:
D005546_1.pdf
D005546_2.pdf
D877888_1.pdf
D145658_1.pdf

P005546_1.jpg
P871786_1.jpg
P871786_2.jpg
P010505_1.jpg
P877888_1.jpg
P877888_2.jpg

alles nach dem "P" oder "D" bis zum "_" ist eine ID, Beispiel: 005546 oder 871786.

Es soll die ID ausgelesen werden und ein Ordner dazu auf C:\IDs\ erstellt werden, Beispiel: C:\IDs\005546
in den ordner sollen dann Alle files die diese ID enthalten. Also: D005546_1.pdf, D005546_2.pdf, P005546_1.jpg alle in den Ordner "005546"

Ich hoffe mir kann da jemand bei meinem Problemchen helfen, denn ich kenne mich mit Batch nicht all zu gut aus.

Vielen Dank im Voraus!

Sollte dies machbar sein hätte ich da noch ein etwas komplexeres Problem :D

Content-Key: 80041

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

Ausgedruckt am: 29.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 06.02.2008 um 15:33:14 Uhr
Goto Top
Hallo Naik0n und willkommen im Forum!

Versuch es so (aber besser erst einmal mit Testdaten face-wink):
@echo off & setlocal
set "Quelle=D:\Ordner"  
set "Ziel=C:\IDs"  

for /f "delims=" %%i in ('dir /b /a-d "%Quelle%" 2^>nul') do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
for /f "delims=_" %%a in (%1) do set "ID=%%a"  
if not defined ID goto :eof
set ID=%ID:~1%
set "ZielOrdner=%Ziel%\%ID%"  
if not exist "%ZielOrdner%" md "%ZielOrdner%" || (echo %ZielOrdner% konnte nicht erstellt werden) & goto :eof  
move /-Y "%Quelle%\%~1" "%ZielOrdner%\"  
Soferne es sich hier um eine einmalige Aktion handelt, sollte sich das Problem von Namenskollisionen (eine Datei gleichen Namens ist im Zielordner schon vorhanden) nicht stellen - trotzdem habe ich bei "move" zur Sicherheit den Schalter "/-Y" hinzugefügt, damit Du im Fall des Falles vor dem Überschreiben noch gefragt wirst.

Grüße
bastla
Mitglied: Biber
Biber 06.02.2008 um 16:52:42 Uhr
Goto Top
Moin bastla,

Vorschlag zur Vereinfachung:
@echo off & setlocal
set "Quelle=D:\Ordner"  
set "Ziel=C:\IDs"  

for %%i in ("%Quelle%\D*_*.pdf" "%quelle%\P*_*.jpg") do call :ProcessFile "%%~nxi"  
goto :eof

:ProcessFile
for /f "delims=PD_" %%a in (%1) do set "ID=%%a"  
set "ZielOrdner=%Ziel%\%ID%"  
if not exist "%ZielOrdner%" md "%ZielOrdner%" || (echo %ZielOrdner% konnte nicht erstellt werden) & goto :eof  
move /-Y "%Quelle%\%~1" "%ZielOrdner%\"  

Grüße
Biber
Mitglied: bastla
bastla 06.02.2008 um 17:05:07 Uhr
Goto Top
@Biber

Vereinfachung ja, allerdings auch Einschränkung hinsichtlich Anfangsbuchstaben und Dateitypen (dass auch ein Ordner mit dem verwendeten Suchmuster "D*_*.pdf" gefunden würde, ist aber eher unwahrscheinlich und daher kein ernstzunehmender Einwand face-wink).

Grüße
bastla
Mitglied: Naik0n
Naik0n 28.02.2008 um 12:28:39 Uhr
Goto Top
Hallo Zusammen,

Danke erstmal für die Vorschläge.
Ein Problem besteht weiterhin, er kopiert jeweils nur 1 File der ID in die ID ordner, der rest bleibt liegen, ausser ich führe den prozess nochmal aus, dann geht es.

Zudem kommt ein weiteres Problem hinzu, ich möchte während die Files verschoben werden die JPG Bilder in PDF umwandeln. ( Commandobefehl: convert "C:\file.jpg" "C:\file.pdf")

Alle Bilder mit der ID sollen am ende in einer PDF landen "ID.pdf"


danke
Mitglied: Biber
Biber 28.02.2008 um 20:37:36 Uhr
Goto Top
...ich weiß gar nicht, wieso einige hier im Forum immer wieder seitenlange Lösungsskripte für wildfremde Hilfesuchende runtertippseln und viele dieser Hilfesuchenden, sollten sie sich nach Wochen überhaupt zurückmelden, dann melden "Habe es angepasst, läuft aber nicht" und wir diesen Fehler durch kontinuierliches Glaskugelreiben entfernen sollen....

.... gaaaanz laaaangsam bis 100 zähle.....

Okay, Freund Naik0n,
wenn der Schnipsel nicht aus dem geCALLten Block zurückkommt, dann fallen mir nur zwei mögliche Gründe dafür ein.
Der wahrscheinlichere davon ist, dass der Batch eben nicht mit der letzten Zeile dieses Blocks aufhört, sondern darunter noch weitere Zeilen folgen. Und die Rücksprunganweisung "goto :eof" fehlt.

Magst Du eventuell bitte Deinen hoch sensiblen Code posten, falls der nicht gerade im Original beim Nobelpreiskommitee in Stockholm unter Verschluss gehalten wird?

Danke
Biber

[Edit]
Okay, eben ist mir noch ein dritter Grund eingefallen, warum es nicht funktioneren könnte...
Ändere bitte die "IF NOT Exist"-Zeile so ab.
if not exist "%ZielOrdner%" md "%ZielOrdner%" || ((echo %ZielOrdner% konnte nicht erstellt werden) & goto :eof)  
[/Edit]