Discussion:
Batchbrainstorming gesucht
(zu alt für eine Antwort)
Ulrich F. Heidenreich
2012-07-06 13:08:35 UTC
Permalink
Guten Morgen!

Gegeben sei folgender Batch für das unterm Win95 laufende DOS:

|net use T: \\serverbook\sdcard
|T:
|cd \dcim\101_pana
|for %%x in (*.tif) do if not exist g:\cambilder\%%x copy %%x g:\cambilder
|for %%x in (*.jpg) do if not exist g:\cambilder\jpg\%%x copy %%x g:\cambilder\jpg
|cd \dcim\100NCD50
|for %%x in (*.jpg) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|for %%x in (*.nef) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|c:
|net use T: /delete

Was es tun soll, dürfte offensichtlich sein: Die Inhalte einer in zwei
Kameras genutzer SD-Karte auf die Festplatte verteilen. Der Zielrechner
hat keinen SD-Slot, schadt aber nix, weil ich den vom Quellrechner aus
im Netz freigebe.

Was es aber tut, wenn eine Karte drinsteckt, auf der sich gar kein
"\dcim\100NCD50" befindet, ist nicht ganz so schnell absehbar. Richtig:
Es kopiert die Panasonic-jpgs ins Nikon-Zielverzeichnis.

"cd" liefert leider keinen Errorlevel, auf daß ich das auf diesem Wege
verhindern könnte. Ein Konstrukt wie

|if exist \dcim\101_pana\*.* goto pana
|if exist \dcim\100NCD50\*.* goto nikon

krankt daran, nicht zu funktionieren, falls beide Quellverzeichnisse
neue Bilder enthalten. Je nach Reihenfolge gewinnt da entweder Nikon
oder Panasonic.

Jemand eine zündende Idee?

TIA,
Ulrich
--
Heiteres Orteraten: Wo liegt eigentlich Loading Image... ?
In 5 Monaten und 19 Tagen ist Weihnachten
XCA4W 9UYZH SC5IC XCTN3 057SG BYTGE N4YCH 8EL0F WM9BA
Stellt euch vor, es ist Freitag und keiner geht hin!
Heiko Rost
2012-07-06 14:33:06 UTC
Permalink
Post by Ulrich F. Heidenreich
Was es aber tut, wenn eine Karte drinsteckt, auf der sich gar kein
Es kopiert die Panasonic-jpgs ins Nikon-Zielverzeichnis.
Vorher in ein Verzeichnis wechseln, das garantiert existiert und keine
Bilder enthält, z. b.

|net use T: \\serverbook\sdcard
|T:
|cd \dcim\101_pana
|for %%x in (*.tif) do if not exist g:\cambilder\%%x copy %%x g:\cambilder
|for %%x in (*.jpg) do if not exist g:\cambilder\jpg\%%x copy %%x g:\cambilder\jpg
cd \
|cd \dcim\100NCD50
|for %%x in (*.jpg) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|for %%x in (*.nef) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|c:
|net use T: /delete
Post by Ulrich F. Heidenreich
"cd" liefert leider keinen Errorlevel, auf daß ich das auf diesem Wege
verhindern könnte. Ein Konstrukt wie
|if exist \dcim\101_pana\*.* goto pana
|if exist \dcim\100NCD50\*.* goto nikon
krankt daran, nicht zu funktionieren, falls beide Quellverzeichnisse
neue Bilder enthalten. Je nach Reihenfolge gewinnt da entweder Nikon
oder Panasonic.
Auf Nichtexisitenz prüfen und nur den entsprechenden Teil überspringen:

|net use T: \\serverbook\sdcard
|T:
if not exist \dcim\101_pana\*.* goto No_Pana
|cd \dcim\101_pana
|for %%x in (*.tif) do if not exist g:\cambilder\%%x copy %%x g:\cambilder
|for %%x in (*.jpg) do if not exist g:\cambilder\jpg\%%x copy %%x g:\cambilder\jpg
:No_Pana
if not exist \dcim\100NCD50\*.* goto No_Nikon
|cd \dcim\100NCD50
|for %%x in (*.jpg) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|for %%x in (*.nef) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
:No_Nikon
|c:
|net use T: /delete

Gruß Heiko

PS: Syntax nicht in der Praxis geprüft, da kein PC mehr mit command.com
verfügbar.
Ulrich F. Heidenreich
2012-07-06 15:07:15 UTC
Permalink
Post by Heiko Rost
Vorher in ein Verzeichnis wechseln, das garantiert existiert und keine
Bilder enthält, z. b.
cd \
Genial!!!1elf

Danke, das Leben kann so einfach sein, wenn man nur auf den richtigen
Trichter kommt. Dein Vorschlag erschlägt jetzt auch die andere Richtung,
die u.U. zu einer weiteren Falle geworden wäre:

|cd \
|cd \dcim\101_pana
|for %%x in (*.tif) do if not exist g:\cambilder\%%x copy %%x g:\cambilder
|for %%x in (*.jpg) do if not exist g:\cambilder\jpg\%%x copy %%x g:\cambilder\jpg
|cd \
|cd \dcim\100NCD50
|for %%x in (*.jpg) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|for %%x in (*.nef) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon

Dein weiterer Vorschlag ist dagegen ein Spaghetticode, den ich
eigentlich vermieden haben wollte. Aber trotzdem auch Danke dafür.

CU!
Ulrich
--
Heiteres Orteraten: Wo liegt eigentlich http://u1h.eu/wo.jpg ?
In 5 Monaten und 19 Tagen ist Weihnachten
94V5W VXA6B MSGYN CYPAV Q73RW 0LDPH KV9BH WM6XX MVQ30
Stellt euch vor, es ist Freitag und keiner geht hin!
Herbert Kleebauer
2012-07-06 14:53:13 UTC
Permalink
Post by Ulrich F. Heidenreich
Guten Morgen!
|net use T: \\serverbook\sdcard
|cd \dcim\101_pana
|for %%x in (*.tif) do if not exist g:\cambilder\%%x copy %%x g:\cambilder
|for %%x in (*.jpg) do if not exist g:\cambilder\jpg\%%x copy %%x g:\cambilder\jpg
|cd \dcim\100NCD50
|for %%x in (*.jpg) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|for %%x in (*.nef) do if not exist g:\cambilder\nikon\%%x copy %%x g:\cambilder\nikon
|net use T: /delete
Warum nicht einfach ein "xcopy /d"
Hans-Bernhard Bröker
2012-07-06 17:14:32 UTC
Permalink
Post by Ulrich F. Heidenreich
Was es aber tut, wenn eine Karte drinsteckt, auf der sich gar kein
"\dcim\100NCD50" befindet, ist nicht ganz so schnell absehbar.
[...]

Der übliche DOS-Batch-Trick, auf Existenz eines Verzeichnisses zu
testen, nutzt DOS' recht seltsame Behandlung von "Geräten" wie CON, NUL,
etc.:

if exist \dcim\101_pana\NUL goto pana

Der Test funktioniert, weil diese Pseudo-Dateien in jedem Verzeichnis
verfügbar sind, solange nur das Verzeichnis selbst existiert.

Lesen Sie weiter auf narkive:
Loading...