Dateierweiterungen umbenennen
Hallo Community,
zu meinem letzten Beitrag konntet Ihr mir schon sehr gut weiterhelfen aber in meiner Bilddatenbank habe ich immer noch einige Schwierigkeiten, die eure Hilfe wesentlich leichter lösbar wäre.
Folgendes Problem habe ich noch:
Die Bilddatenbank ist in zwei Bereichen aufgeteilt. Es gibt einmal Vorschaubilder und einmal Originalbilder. Diese Bilder sind in unterschiedliche Verzeichnisse abgelegt, wobei der Bildname des Vorschaubildes und des Originalbildes gleich sind. Nur die Dateierweiterung des Originalbildes kann unterschiedlich sein (z.B. .pcd, .tif, .jpg)
Die Vorschaubilder liegen im Verzeichnis:
\\server1\D:\Previews\mbarchiv\2002\02010100001\DIR001\bildnr_xy1.jpg
\\server1\D:\Previews\mbarchiv\2002\02010100001\DIR001\bildnr_xy2.jpg
...
\\server1\D:\Previews\mbarchiv\2002\02011200001\DIR001\bildnr_xy100.jpg
\\server1\D:\Previews\mbarchiv\2002\02011200001\DIR001\bildnr_xy1101.jpg
...
Info:
\\server1\D:\Previews\mbarchiv\2002\ das Verzeichnis bis 2002 ändert sich nicht, nur danach sind Verzeichnisse (von der Anzahl aber wie oben beschrieben) vorhanden die ich nicht kenne.
Die Originalbilder liegen im Verzeichnis:
\\netapp\raid\2002\020100001\images\DIR001\bildnr_xy1.pcd
\\netapp\raid\2002\020100001\images\DIR001\bildnr_xy2.pcd
...
\\netapp\raid\2002\021200001\images\DIR001\bildnr_xy100.tif
\\netapp\raid\2002\021200001\images\DIR001\bildnr_xy1.jpg
...
Info:
\\netapp\raid\2002\ Das Verzeichnis bis hier ändert sich nicht
Das Verzeichnis danach 020100001 (Datum und Anzahl) ist bei Vorschaubild und Originalbild auch immer gleich. Ist dieses Vezeichnis im Vorschaubereich ein anderes (021200001) muss es im Originalbereich dann auch 021200001 heißen.
Da ich jetzt wissen möchte ob zu jedem Vorschaubild ein Originalbild mit dem gleichen Dateinamen existiert (wobei die Dateierweiterung unterschiedlich sein kann) habe ich mit Totalcommander (Verzeichnisse synchronisieren..) die Dateien verglichen.
Da die Dateierweiterung in den Originalbilder unterschiedlich sind, zeigt jetzt Totalcommander das die Bilder (Vorschaubild zu Originalbild) unterschiedlich sind, obwohl nur die Erweiterung anders ist. Bei ein paar hundert Bildern könnte man noch erkennen, dass die Bilder bis auf die Dateierweiterung gleich sind, aber bei 500.000 Bildern ist das einfach nicht mehr möglich.
Ich möchte jetzt mit einer Batch die Erweiterung in den Originalbildern auslesen und die Vorschaubilder mit der Dateierweiterung umbenennen.
Mit einer for-Schleife und findstr habe ich schon etwas versucht aber richtig weiter gekommen bin ich nicht.
for /r \\server1\D:\Previews\s %%i in ("*.*") do @echo %%i > d:\verzeichnis.txt
findstr /b \\server1\D:\Previews d:\verzeichnis.txt
Könnt Ihr mir vielleicht weiterhelfen?
Gruß combat
zu meinem letzten Beitrag konntet Ihr mir schon sehr gut weiterhelfen aber in meiner Bilddatenbank habe ich immer noch einige Schwierigkeiten, die eure Hilfe wesentlich leichter lösbar wäre.
Folgendes Problem habe ich noch:
Die Bilddatenbank ist in zwei Bereichen aufgeteilt. Es gibt einmal Vorschaubilder und einmal Originalbilder. Diese Bilder sind in unterschiedliche Verzeichnisse abgelegt, wobei der Bildname des Vorschaubildes und des Originalbildes gleich sind. Nur die Dateierweiterung des Originalbildes kann unterschiedlich sein (z.B. .pcd, .tif, .jpg)
Die Vorschaubilder liegen im Verzeichnis:
\\server1\D:\Previews\mbarchiv\2002\02010100001\DIR001\bildnr_xy1.jpg
\\server1\D:\Previews\mbarchiv\2002\02010100001\DIR001\bildnr_xy2.jpg
...
\\server1\D:\Previews\mbarchiv\2002\02011200001\DIR001\bildnr_xy100.jpg
\\server1\D:\Previews\mbarchiv\2002\02011200001\DIR001\bildnr_xy1101.jpg
...
Info:
\\server1\D:\Previews\mbarchiv\2002\ das Verzeichnis bis 2002 ändert sich nicht, nur danach sind Verzeichnisse (von der Anzahl aber wie oben beschrieben) vorhanden die ich nicht kenne.
Die Originalbilder liegen im Verzeichnis:
\\netapp\raid\2002\020100001\images\DIR001\bildnr_xy1.pcd
\\netapp\raid\2002\020100001\images\DIR001\bildnr_xy2.pcd
...
\\netapp\raid\2002\021200001\images\DIR001\bildnr_xy100.tif
\\netapp\raid\2002\021200001\images\DIR001\bildnr_xy1.jpg
...
Info:
\\netapp\raid\2002\ Das Verzeichnis bis hier ändert sich nicht
Das Verzeichnis danach 020100001 (Datum und Anzahl) ist bei Vorschaubild und Originalbild auch immer gleich. Ist dieses Vezeichnis im Vorschaubereich ein anderes (021200001) muss es im Originalbereich dann auch 021200001 heißen.
Da ich jetzt wissen möchte ob zu jedem Vorschaubild ein Originalbild mit dem gleichen Dateinamen existiert (wobei die Dateierweiterung unterschiedlich sein kann) habe ich mit Totalcommander (Verzeichnisse synchronisieren..) die Dateien verglichen.
Da die Dateierweiterung in den Originalbilder unterschiedlich sind, zeigt jetzt Totalcommander das die Bilder (Vorschaubild zu Originalbild) unterschiedlich sind, obwohl nur die Erweiterung anders ist. Bei ein paar hundert Bildern könnte man noch erkennen, dass die Bilder bis auf die Dateierweiterung gleich sind, aber bei 500.000 Bildern ist das einfach nicht mehr möglich.
Ich möchte jetzt mit einer Batch die Erweiterung in den Originalbildern auslesen und die Vorschaubilder mit der Dateierweiterung umbenennen.
Mit einer for-Schleife und findstr habe ich schon etwas versucht aber richtig weiter gekommen bin ich nicht.
for /r \\server1\D:\Previews\s %%i in ("*.*") do @echo %%i > d:\verzeichnis.txt
findstr /b \\server1\D:\Previews d:\verzeichnis.txt
Könnt Ihr mir vielleicht weiterhelfen?
Gruß combat
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85919
Url: https://administrator.de/contentid/85919
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo combat!
Aufgrund der großen Menge an Bildern würde ich folgende Vorgangsweise vorschlagen: Erzeugen je einer Liste der Originale und der Vorschaubilder mit relativen Pfaden - für die Vorschaubilder kann, da es sich ohnehin durchwegs um ".jpg"-Dateien handelt, auch der Typ weggelassen werden (macht die Auswertung später einfacher) und als dritten Schritt Abgleichen der beiden Listen.
Originalliste erzeugen:
Vorschauliste erzeugen (ich schreibe den Pfad so, wie von Dir angegeben, also inkl "D:"):
Auswertung:
Kurz zu den beiden Ergebnisdateien: "Differenzen.txt" enthält eine Liste aller Originaldateien, welche nicht den Typ ".jpg" haben, zu denen es aber gleichnamige Vorschaubilder gibt, und "Fehlende.txt" listet alle Vorschaudateien auf, zu denen keine gleichnamigen (Erweiterung egal) Originale gefunden wurden.
Nicht aufgelistet werden Originale, zu denen es keine Vorschau gibt.
Grüße
bastla
Ich möchte jetzt mit einer Batch die Erweiterung in den Originalbildern auslesen und die Vorschaubilder mit der Dateierweiterung umbenennen.
Ganz klar ist mir nicht, wie das gemeint ist (denn aus einem "bildnr_xy1.jpg" ein "bildnr_xy1.tiff" machen zu wollen hast Du doch sicher nicht vor), aber als Vorarbeit könntest Du die entsprechenden Originalbilder einmal auflisten.Aufgrund der großen Menge an Bildern würde ich folgende Vorgangsweise vorschlagen: Erzeugen je einer Liste der Originale und der Vorschaubilder mit relativen Pfaden - für die Vorschaubilder kann, da es sich ohnehin durchwegs um ".jpg"-Dateien handelt, auch der Typ weggelassen werden (macht die Auswertung später einfacher) und als dritten Schritt Abgleichen der beiden Listen.
Originalliste erzeugen:
@echo off & setlocal
set "Liste=D:\Originale.txt"
If exist "%Liste%" del "%Liste%"
for /f %%i in ('dir /b /s /a-d \\netapp\raid\2002\*.*') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "Datei=%~1"
echo %Datei:\\netapp\raid\2002\=%>>"%Liste%"
goto :eof
Vorschauliste erzeugen (ich schreibe den Pfad so, wie von Dir angegeben, also inkl "D:"):
@echo off & setlocal
set "Liste=D:\Vorschau.txt"
If exist "%Liste%" del "%Liste%"
for /f %%i in ('dir /b /s /a-d \\server1\D:\Previews\mbarchiv\2002\*.*') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "Datei=%~dpn1"
echo %Datei:\\server1\D:\Previews\mbarchiv\2002\=%>>"%Liste%"
goto :eof
Auswertung:
@echo off & setlocal
set "OListe=D:\Originale.txt"
set "VListe=D:\Vorschau.txt"
set "DListe=D:\Differenzen.txt"
set "FListe=D:\Fehlende.txt"
if exist "%DListe%" del "%DListe%"
if exist "%FListe%" del "%FListe%"
for /f "usebackq delims=" %%i in ("%VListe%") do findstr /b /c:"%%i.jpg" "%OListe%">nul || call :ProcessFile "%%i"
goto :eof
:ProcessFile
set Original=
for /f "delims=" %%a in ('findstr /b /c:%1 "%OListe%"') do set "Original=%%a"
if not defined Original (echo %~1.jpg)>>"%FListe%" & goto :eof
(echo %Original%)>>"%DListe%"
goto :eof
Nicht aufgelistet werden Originale, zu denen es keine Vorschau gibt.
Grüße
bastla
Hallo combat!
Zum Thema Umbenennen: Sobald die Liste "Differenzen.txt" erstellt ist, kann diese als Basis für eine derartige Aktion dienen - allerdings frage ich mich, was Du dann als nächstes vorhast ...
Anyhow - hier das Umbenennen:
Originaldateien ohne zugehörige Vorschaubilder lassen sich aber natürlich auch noch herausfiltern:
Grüße
bastla
Zum Thema Umbenennen: Sobald die Liste "Differenzen.txt" erstellt ist, kann diese als Basis für eine derartige Aktion dienen - allerdings frage ich mich, was Du dann als nächstes vorhast ...
Anyhow - hier das Umbenennen:
@echo off & setlocal
set "Liste=D:\Differenzen.txt"
set "Pfad=\\server1\D:\Previews\mbarchiv\2002"
pushd \
for /f "usebackq delims=" %%i in ("%Liste%") do ren "%Pfad%%%~pni.jpg" *%%~xi
popd
Originaldateien ohne zugehörige Vorschaubilder lassen sich aber natürlich auch noch herausfiltern:
@echo off & setlocal
set "OListe=D:\Originale.txt"
set "VListe=D:\Vorschau.txt"
set "FListe=D:\FehlendeVorschaubilder.txt"
if exist "%FListe%" del "%FListe%"
pushd \
for /f "usebackq delims=" %%i in ("%OListe%") do call :ProcessFile "%%~pni"
popd
goto :eof
:ProcessFile
set "Datei=%~1"
set "Datei=%Datei:~1%"
findstr /b /c:"%Datei%" "%VListe%">nul || (echo %Datei%)>>"%FListe%"
goto :eof
Grüße
bastla