PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [S] ein bisschen Hilfe bei einem Script


Yups
2009-05-18, 22:33:40
Hallo zusammen,

da ich in puncto Programmieren und Scripten nicht besonders bewandert bin, wende ich mich mal an euch.
Beim Fotografieren nehme ich die Bilder immer im RAW (Rohdaten) und jpg Format auf. Die Dateinamen unterscheiden sich nur durch die Endung (CR2 und jpg). Da der Bildbetrachter bei den RAW sehr langsam wird und ich mir nicht alle Bilder doppelt ansehen möchte, verfrachte ich die Bilder immer in einen Unterordner (RAWs). Beim Aussortieren bleiben dementsprechend erstmal alle RAWs in dem Ordner, das kostet massig Speicherplatz und ist unübersichtlich.
In einem anderen Forum habe ich ein kleines Script gefunden, das die RAWs löscht die kein jpg mehr "haben".
Leider funktioniert es nicht mit Leerzeichen und Umlauten in den Ordnern und ist reichlich unkomfortabel. Hat nicht jemand Lust es ein wenig aufzupeppen? Das wäre sehr nobel :)


@echo off
if %1 EQU "" goto usage
for %%b in (%1\RAWs\*.cr2) do if not exist "%1\%%~nb.jpg" del "%1\RAWs\%%~nb.cr2"
goto :eof
:usage
echo wo sans denn?

(Echo funzt iwie auch nicht...)

Der_Donnervogel
2009-05-19, 02:20:23
Eigentlich schaut der Code nicht so schlecht aus. Hier mal eine leicht geänderte Version davon, die bei mir in einem kurzen Test auch mit Leerzeichen und Umlauten zurecht gekommen ist. Ist aber nur ein Schnellschuss und ein Test bevor man sie auf wertvolle Daten los lässt ist sicher angeraten. Es gibt noch einiges an Potential die Sache zu verbessern, da diese Version z.B. immer den RAWs Ordner in dem Verzeichnis sucht in dem sie gerade liegt. Allerdings hoffe ich mal dass sie das Problem mit den Umlauten und Leerzeichen löst.
DIR /B RAWs\*.cr2 > gefunden.txt
FOR /F "delims=" %%I IN (gefunden.txt) DO IF not exist "%%~nI.jpg" del "RAWs\%%~nI.cr2"
del gefunden.txt

Gast
2009-05-19, 08:25:48
Urgs, genau das ist der Grund warum man zum vernünftig scripten (bzw. irgendwas automatisiert auf der Kommandozeile machen) Linux nimmt. Das ist nicht als spam gedacht sondern als ernsthafter konstruktiver Vorschlag, probier mal eine beliebige Linux distri und schau wie weit du dort mit der Kommandozeile kommst. du wirst dich wundern was alles geht ;)

noid
2009-05-19, 08:54:28
Urgs, genau das ist der Grund warum man zum vernünftig scripten (bzw. irgendwas automatisiert auf der Kommandozeile machen) Linux nimmt. Das ist nicht als spam gedacht sondern als ernsthafter konstruktiver Vorschlag, probier mal eine beliebige Linux distri und schau wie weit du dort mit der Kommandozeile kommst. du wirst dich wundern was alles geht ;)

ja, man kann sich so arg wundern... zB mit cygwin.
Oder perl, python etc nutzen. Auch eine Idee.

Man muss die Pinguinseuche Linux ja nicht überall verbreiten weil man nur ein kleines Script schreibt.

Trap
2009-05-19, 10:06:53
Es gibt von Microsoft auch Powershell, das ist weniger eklig zu programmieren, zumindest wenn man .NET Sprachen gewöhnt ist.

Der_Donnervogel
2009-05-19, 16:47:15
Es gibt eine Menge Möglichkeiten wie man sowas machen kann. Ich hätte dafür wohl auch keine Batch-Datei genommen, sondern ein kleines .Net-Programm gemacht. Vor allem im Hinblick darauf, dass ich vielleicht erst noch einen Blick drauf werfen will, was gelöscht wird, ehe es gelöscht wird. Das braucht auch nicht viel länger als so eine Batchdatei machen. Insofern sollte mal der TS was dazu sagen, ob er eigentlich nur Hilfe für die Batchdatei will, oder aber auch Vorschläge, wie man sein Problem anders vielleicht besser lösen kann.

Yups
2009-05-19, 19:27:31
Danke schonmal für eure Hilfe und Bemühungen :)

Den Vorschlag vom Donnervogel probiere ich gleich mal aus! Die Variante mit der Batch-Datei ist so ziemlich das unpraktischste das es gibt, aber ich war trotzdem froh überhaupt irgendwas zu haben. Wenn jemand Zeit&Lust hätte etwas besseres zu entwickeln, so wäre nicht nur mir, sondern sicherlich auch vielen Leute aus dem dslr und dforum geholfen =)

@Gast, ich glaube dir ja gerne, aber nur wegen einem Lösch-Script auf Linux zu wechseln halte ich doch ein wenig übertrieben ;)

Falls jemand Muße hat sich daran zu setzen, wären folgende Funktionen ein RIEEESEN Fortschritt.

- Unterordnerbezeichnung für die RAWs auswählbar, evtl. sogar Mehrfachnennungen oder selbes Verzeichnis
- Bestätigung was gelöscht wird (grafische Oberfläche?)
- Mehere Ordner gleichzeitig wählbar
- Im Kontextmenü von Windoof integriert

(... mir fällt bestimmt noch mehr ein ;) )

Ich wäre euch echt richtig dankbar!!! =)

Edit:
Donnervogels Script funktioniert soweit super! Allerdings muss man es leider umständlicherweise in den Foto Ordner kopieren, vorher ging es per Drag&Drop... Trotzdem danke!

Mr. Lolman
2009-05-19, 19:45:18
Achwas. Grad für so Kleinigkeiten ist Batch optimal. Mit Rückfrage:


@echo off
echo.
echo Folgende Dateien werden gelöscht. Strg+C zum Abbrechen.
echo.
for /f "delims=" %%b in ('dir /b RAWs\*.cr2') do if not exist "%%~nb.jpg" echo "RAWs\%%~nb.cr2"
pause
for /f "delims=" %%b in ('dir /b RAWs\*.cr2') do if not exist "%%~nb.jpg" del "RAWs\%%~nb.cr2"


EDIT:
OK. Grafische Oberfläche geht halt nicht. Aber über die Registry könnte man eine Verknüpfung des Scripts ins Kontextmenü legen. Bei alten Windowsversionen hats auch funktioniert, dass man mittels Fragezeichen hinter dem Pfad in der Verknüpfung noch einen Parameter mitgeben kann. KA wie, und ob, das jetzt noch geht.

Hoppla. Hab die Strings falsch zusammenkopiert gehabt.

Mr. Lolman
2009-05-19, 20:45:25
So funktionierts mit Rückfrage und Kontextmenü:

Regdatei anlegen mit folgendem Inhalt (Pfad muss natürlich erst angepasst werden):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\RAWs löschen]

[HKEY_CLASSES_ROOT\Directory\shell\RAWs löschen\command]
@="C:\\Dokumente und Einstellungen\\Admin\\Desktop\\Neuer Ordner\\test.cmd %1"



In die Batchdatei kommt dann folgendes:


@echo off
echo.
echo Folgende Dateien werden gel”scht:
echo.
echo %1
for /f "delims=" %%b in ('dir /b %1\*.cr2') do if not exist "%1\..\%%~nb.jpg" echo "%1\%%~nb.cr2"
echo.
pause
for /f "delims=" %%b in ('dir /b %1\*.cr2') do if not exist "%1\..\%%~nb.jpg" del "%1\%%~nb.cr2"

Wenn man alles richtig gemacht hat, taucht das Kontextmenü auf, sobald man rechts auf einen Ordner klickt, aus dem man die verwaisten RAW-Dateien entfernen will.



Damit unterstützen die paar Zeilen Code folgende Features:

- Unterordnerbezeichnung für die RAWs auswählbar
- Mehrfachnennungen
- Bestätigung was gelöscht wird
- Im Kontextmenü von Windoof integriert



von wegen batch ist unpraktisch ;)

Yups
2009-05-19, 20:51:22
Super danke! Ich werd's gleich mal testen!

Gerade bin ich auch auf ein net Programm gestoßen, das gefällt mir allerdings nur teilweise. http://nubi.bplaced.net/msdelete/

Contra:
- Pfad zum RAW Unterordner muss extra gewählt werden
- Drag und Drop funktioniert nur mit einzelnen Bildern, nicht mir Ordnern.
- Code soll (laut Entwickler) ziemlicher Murks sein.
- Kontextintegrierung soll auch nicht so toll sein (habs selber noch nicht getestet)

Yups
2009-05-19, 21:00:48
Tut mir Leid dir das sagen zu müssen, aber bisher funktioniert leider nichts :(

Ich hab mal einen Screenshot gemacht:
http://img.xrmb2.net/images/700696.jpeg

(Reg natürlich eintragen lassen ;) )
Betriebssystem ist Win 2003 x64

Danke! =)

(Ich glaub du hast den Unterordner für die RAWs vergessen?)

Neee, man muss den RAWs Ordner draufziehen, das ist natürlich auch ne Möglichkeit ;) Allerdings klappt das mit der Kontextintegrierung trotzdem nicht ...

Mr. Lolman
2009-05-19, 21:06:29
Hab das Script so gebaut, dass du direkt auf den Unterordner klicken musst. Wenn du statt frei wählbarer Unterordner lieber frei wählbare Hauptordner willst, nimm dieses hier. Damit sind dann per Kontextmenü zwar mehrere Hauptordner gleichzeitig wählbar (das Script geht für jeden Ordner extra auf), aber die Unterordner müssen alle "RAWs" heissen:



@echo off
echo.
echo Folgende Dateien werden gel”scht:
echo.
echo %1
for /f "delims=" %%b in ('dir /b %1\RAWs\*.cr2') do if not exist "%1\%%~nb.jpg" echo "%1\RAWs\%%~nb.cr2"
echo.
pause
for /f "delims=" %%b in ('dir /b %1\RAWs\*.cr2') do if not exist "%1\%%~nb.jpg" del "%1\RAWs\%%~nb.cr2"

Allerdings klappt das mit der Kontextintegrierung trotzdem nicht ...

Doch klappt. Nur ists direkt drinnen, und nicht im SendTo (schau mal genau deinen Screenshot an). Könnte man aber auch noch ändern. Wenn dus lieber im "Senden An-Ordner" drinnen hast, kopierst du die Batch einfach in "C:\Dokumente und Einstellungen\[Name]\SendTo". Den Registry Schlüssel würd ich dann aber wieder entfernen:


Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\Directory\shell\RAWs löschen]

[-HKEY_CLASSES_ROOT\Directory\shell\RAWs löschen\command]
@="C:\\Dokumente und Einstellungen\\Admin\\Desktop\\Neuer Ordner\\test.cmd %1"

Yups
2009-05-19, 21:26:40
Du bist mein Held =) ... und ich steh/stand auf dem Schlauch! Peinlich ;(

Jetzt kommt das Script leider nicht mit einem Leerzeichen im Hauptordnernamen klar.

http://img.xrmb2.net/images/175679.jpeg

Mr. Lolman
2009-05-19, 21:52:57
Du bist mein Held =) ... und ich steh/stand auf dem Schlauch! Peinlich ;(

Jetzt kommt das Script leider nicht mit einem Leerzeichen im Hauptordnernamen klar.

http://img.xrmb2.net/images/175679.jpeg

Aber nur über die Sendto Methode, oder? Die Registry Methode müsste klappen. Liegt anscheinend daran, dass Windows bei Sendto den Pfad mit Hochkommas mitschickt, und mit Drag and Drop und über die Registrymethode nicht.
:uhammer:

Probier mal, dieses Batch-file in den Send-To Ordner zu schieben:

@echo off
echo.
echo Folgende Dateien werden gel”scht:
echo.
for /f "delims=" %%b in ('dir /b %1\*.cr2') do if not exist %1"\..\%%~nb.jpg" echo %%~nb.cr2
echo.
pause
for /f "delims=" %%b in ('dir /b %1\*.cr2') do if not exist %1"\..\%%~nb.jpg" del %1"\%%~nb.cr2"

Yups
2009-05-19, 22:05:20
Aber nur über die Sendto Methode, oder? Die Registry Methode müsste klappen. Liegt anscheinend daran, dass Windows bei Sendto den Pfad mit Hochkommas mitschickt, und mit Drag and Drop und über die Registrymethode nicht.

Probier mal, dieses Batch-file in den Send-To Ordner zu schieben:

@echo off
echo.
echo Folgende Dateien werden gel”scht:
echo.
for /f "delims=@" %%b in ('dir /b %1\*.cr2') do if not exist %1"\..\%%~nb.jpg" echo %%~nb.cr2
echo.
pause
for /f "delims=@" %%b in ('dir /b %1\*.cr2') do if not exist %1"\..\%%~nb.jpg" del %1"\%%~nb.cr2"

Danke für die Mühe! Ich hatte es mir der Registry Methode versucht, aber auch die SendTo und Drag und Drop Methoden funktionieren nicht. Die Fehlermeldung sieht recht ähnlich aus.

Mr. Lolman
2009-05-19, 22:22:47
Danke für die Mühe! Ich hatte es mir der Registry Methode versucht, aber auch die SendTo und Drag und Drop Methoden funktionieren nicht. Die Fehlermeldung sieht recht ähnlich aus.

Und jetzt gehts? Wenn nicht, dann lass mal oben das @echo off weg und mach dann nen Screenshot von der Fehlermeldung.



EDIT: Hoppla. Ich weiss worans scheitert. Hab dir aus Versehen wieder das unterordnerbasierende Script hochgestellt (kommt davon, wenn man die eigenen Tests zu sehr vereinfacht)

Letzter Versuch. Für heut hab ich dann genug Batchverwirrung erzeugt ;)


@echo off
echo.
echo Folgende Dateien werden gel”scht:
echo.
for /f "delims=" %%b in ('dir /b %1\RAWs\*.cr2') do if not exist %1"\%%~nb.jpg" echo %%~nb.cr2
echo.
pause
for /f "delims=" %%b in ('dir /b %1\RAWs\*.cr2') do if not exist %1"\%%~nb.jpg" del %1"\RAWs\%%~nb.cr2"

Yups
2009-05-19, 22:48:03
Und jetzt gehts? Wenn nicht, dann lass mal oben das @echo off weg und mach dann nen Screenshot von der Fehlermeldung.



EDIT: Hoppla. Ich weiss worans scheitert. Hab dir aus Versehen wieder das unterordnerbasierende Script hochgestellt (kommt davon, wenn man die eigenen Tests zu sehr vereinfacht)

Letzter Versuch. Für heut hab ich dann genug Batchverwirrung erzeugt ;)


@echo off
echo.
echo Folgende Dateien werden gel”scht:
echo.
for /f "delims=" %%b in ('dir /b %1\RAWs\*.cr2') do if not exist %1"\%%~nb.jpg" echo %%~nb.cr2
echo.
pause
for /f "delims=" %%b in ('dir /b %1\RAWs\*.cr2') do if not exist %1"\%%~nb.jpg" del %1"\RAWs\%%~nb.cr2"

Super, Send-To geht! Hab dank :) Vielleicht magst du ja morgen nochmal die Version fürs Kontextmenü umschreiben, dann wäre ich voll und ganz zufrieden =)

Mr. Lolman
2009-05-19, 22:53:33
Super, Send-To geht! Hab dank :) Vielleicht magst du ja morgen nochmal die Version fürs Kontextmenü umschreiben, dann wäre ich voll und ganz zufrieden =)

Wenn die Version auf Post#12 nicht funktioniert, dann müsst die letzte eigentlich klappen. Wenn nicht, dann brauch ich einen Screenshot der Fehlermeldung (ohne dem @echo off, in der 1. Zeile).

Yups
2009-05-19, 23:31:20
Wenn die Version auf Post#12 nicht funktioniert, dann müsst die letzte eigentlich klappen. Wenn nicht, dann brauch ich einen Screenshot der Fehlermeldung (ohne dem @echo off, in der 1. Zeile).

Die Version in Post 12 hat auch das Problem mit dem Dateinamen.
Hier der Screenie:
http://img.xrmb2.net/images/130684.jpeg