BAT Datei: RAWs bei fehlenden Jpegs löschen

Moin Experten!

Meine Kamera erstellt bei der Aufnahme automatisch eine RAW Datei und eine JPG Datei.

Normalerweise reichen mir die Jpegs, aber wenn ich dann doch ein Photo bearbeiten will ziehe ich lieber die RAW datein heran.

Was will ich jetzt eigentlich hier?

Ich will eine delraw.bat datei machen, die RAWs löscht, von denen keine Jpegs vorhanden sind (weil ich sie aufgrund von Unschärfe und der gleichen gelöscht habe)

Beispiel:

IMG_1772.CR2
IMG_1772.JPG

Ich lösche IMG_1772.JPG, weil es unscharf ist. Dann führe ich die bat Datei aus und er kontrolliert, welche JPGs noch da sind und sieht, dass IMG_1772.JPG fehlt und löscht IMG_1772.CR2 somit.

Ich habe auch schon einige commands gefunden nur hab ich keine idee wie ich das aufbaun könnte?!

Mit freundlichen Grüßen,

hänsen

Hallo Hänsen!

Meine DOS-Zeit ist schon ein wenig her, aber an die meisten Dinge erinnert man sich ja quasi ewig.

Vom Grundsatz her sollte Dir folgende Zeile genügen:

for /F "delims=." %a in ('dir /B \*.cr2') do if not exist %a.jpg del %a.cr2

Es wird für jede vorkommende *.cr2 Datei nach dem .jpg Pendant gesucht. Existiert dieser nicht, wird die .cr2-Datei gelöscht.

Dazu musst Du natürlich im entsprechenden Verzeichnis stehen. Um das im Batch anzuwenden musst Du den Befehl noch erweitern (vorher ein Wechsel ins passende Verzeichnis und ggf. die Variablen anpassen).

Grüße
Andreas van de Langenberg

for /F „delims=.“ %a in (‚dir /B *.cr2‘) do if not exist
%a.jpg del %a.cr2

ich versuche mal den syntax zu verstehen:

for /F sagt, dass es eine Schleife ist?
delims versteh ich nicht ganz
%a ist eine variable in 'dir /B mit *.cr2 Endung?
Der Rest ist ohnehin klar.

Es wird für jede vorkommende *.cr2 Datei nach dem .jpg Pendant
gesucht. Existiert dieser nicht, wird die .cr2-Datei gelöscht.

Dazu musst Du natürlich im entsprechenden Verzeichnis stehen.
Um das im Batch anzuwenden musst Du den Befehl noch erweitern
(vorher ein Wechsel ins passende Verzeichnis und ggf. die
Variablen anpassen).

wie kann ich das machen, dass ich die BAT datei einfach nur in den gewünschten ordner schieben muss um sie dann auszuführen?

Grüße
Andreas van de Langenberg

Grüße zurück!

Hänsen

for /F „delims=.“ %a in (‚dir /B *.cr2‘) do if not exist
%a.jpg del %a.cr2

hallo Hansen,

for /F sagt, dass es eine Schleife ist?

nein, das sagt das for allein bzw. zusammen mit dem Do.
/f und delims sind Parameter von For

So wie es da steht klappt es im Prompt oder bei Start–Ausführen.
In einer Batch brauchst du doppelte Prozente.

for /F „delims=.“ %%a in (‚dir /B *.cr2‘) do if not exist %%a.jpg del %%a.cr2

delims versteh ich nicht ganz

Es gibt an an welchem zeichen %%a gesplittet werden soll.

%a ist eine variable in 'dir /B mit *.cr2 Endung?

Ja, Dir /b erzeugt eine Liste mit den Namen der dateien die die Endung .cr2 haben. %%a ist dann erst der erste Eintrag, im zweiten Durchlauf der zweite Eintrag usw.

Durch das delims dann nicht der volle Name sondern der Teil vor dem .cr2

Schau mal hier:

http://qitcon.de/index.php?id=93

Gruß
Reinhard

1 Like

Ich hab mal folgendes ausprobiert:

for /F "delims=." %%a in ('dir C:\test \*.cr2') do if not exist %%a.jpg del %%a.cr2

Siehe hier:

http://dl.getdropbox.com/u/730936/Verzeichnis.jpg

http://dl.getdropbox.com/u/730936/Programm.jpg

Leider löscht er mir den ganzen ordner nachdem er mich gefragt hat ob ich es löschen will… kA wieso das nicht geht :confused:

Ich würde wirklich gerne den Ordner abfragen wo ich mich grade befinde, also dass ich die bat datei einfach nur in das entsprechende zu kontrollierende verzeichnis schieben muss und er automatisch in dem verzeichnis seine kontrolle durchführt.

Mit freundlichen Grüßen,

Hänsen

for /F „delims=.“ %%a in (‚dir C:\test *.cr2‘) do if not exist
%%a.jpg del %%a.cr2

Hallo Hansen,

Leider löscht er mir den ganzen ordner nachdem er mich gefragt
hat ob ich es löschen will… kA wieso das nicht geht :confused:

Mir nicht unklar warum da der gelöscht wird. probier mal das da:

del C:\test\del.txt
for /F „delims=.“ %%a in (‚dir C:\test *.cr2‘) do if not exist %%a.jpg echo %%a >>C:\test\del.txt

In del.txt müßten dann alle zu löschenden namen drinstehen. Ist der Ordnername dabei? kaum glaub.

Ich würde wirklich gerne den Ordner abfragen wo ich mich grade
befinde, also dass ich die bat datei einfach nur in das
entsprechende zu kontrollierende verzeichnis schieben muss und
er automatisch in dem verzeichnis seine kontrolle durchführt.

? Stell die bat doch in den betrffenden Ordner. Ansonsten verstehe ich das nicht ganz.

Gruß
Reinhard

del C:\test\del.txt
for /F „delims=.“ %%a in (‚dir C:\test *.cr2‘) do if not exist
%%a.jpg echo %%a >>C:\test\del.txt

In del.txt müßten dann alle zu löschenden namen drinstehen.
Ist der Ordnername dabei? kaum glaub.

Das steht in der del.txt:

 Volume in Laufwerk C: hat keine Bezeichnung 
 Volumeseriennummer: DC25-B327 
 Verzeichnis von C:\test 
24 
24 
24 
24 
24 
24 
24 
24 
24 
24 
24 
24 
24 
24 
 Verzeichnis von C:\test 
24 
24 
24 
24 
24 
 17 Datei(en) 161 
 2 Verzeichnis(se), 3 

? Stell die bat doch in den betrffenden Ordner. Ansonsten
verstehe ich das nicht ganz.

achso… der macht automatisch das Verzeichnis in dem die bat datei ist zum Arbeitsverzeichnis? Wusste ich nicht :smiley:

Mit freundlichen Grüßen,
Hänsen!

Im übrigen:

Die Ausgabe des CMD Fensters, falls es hilft:

http://dl.getdropbox.com/u/730936/CMD.jpg

hallo Hansen,

irgendwie ist /b auf der Strecke geblieben, probiers mal s o:
(ich hab .txt genommen weil ich keine .cr2 habe)

del C:\test\del.txt
for /F „delims=.“ %%a in (‚dir /b C:\test *.txt‘) do if not exist %%a.jpg echo %%a >>C:\test\del.txt

achso… der macht automatisch das Verzeichnis in dem die bat
datei ist zum Arbeitsverzeichnis? Wusste ich nicht :smiley:

Ja, ohne Einsatz von CD „arbeitet“ die bat da wo sie drinsteht.

Gruß
Reinhard

del C:\test\del.txt
for /F „delims=.“ %%a in (‚dir /b C:\test *.txt‘) do if not
exist %%a.jpg echo %%a >>C:\test\del.txt

ich hab mal alles aufgebaut und da passt irgendwas nicht :confused:

http://dl.getdropbox.com/u/730936/Problems.jpg

Was heißt eigentlich das /b?

Und was muss ich statt

 in ('dir /b C:\test \*.txt') 

schreiben, damit er nur im lokalen verzeichnis, in dem die bat datei ist arbeitet?

Kann das ein problem sein, dass das in wirklichkeit leere .doc files sind, denen ich einfach eine endung *.jpg bzw. *.cr2 gegeben habe? (sie heißen nicht *.doc.jpg, keine angst!)

Mit freundlichen Grüßen,
Hänsen

Hallo Hansen,

Was heißt eigentlich das /b?

Lass mal die nachstehende Bat laufen und schau dir dirfor.txt an.

Und was muss ich statt

in (‚dir /b C:\test *.txt‘)

schreiben, damit er nur im lokalen verzeichnis, in dem
die bat datei ist arbeitet?

Sorry, mein Fehler, es muß
(‚dir /b C:\test*.txt‘)
heißen.
Oder ohne Pfad
(‚dir *.txt‘)

Vielleicht kommen einige Probleme daher wenn du Leerzeichen im Namen hast.

In eine bat schreiben:

echo D I R > c:\test\dirfor.txt
help dir >> c:\test\dirfor.txt
echo   >> c:\test\dirfor.txt
echo   >> c:\test\dirfor.txt
echo F O R >> c:\test\dirfor.txt
help for >> c:\test\dirfor.txt

Gruß
Reinhard

1 Like

hab mal die leerzeichen rausgegeben und den pfad weggelassen und es funktioniert ohne probleme :smiley:

DANKE!

Der fertige Code so wie ich ihn jetzt drinnen stehn hab:

del C:\test\del.txt
for /F "delims=." %%a in ('dir /b \*.cr2') do if not exist %%a.jpg echo %%a.cr2 \>\>C:\test\del.txt
for /F "delims=." %%a in ('dir /b \*.cr2') do if not exist %%a.jpg del %%a.cr2
pause