arnito
Goto Top

Dateinamen mit Leerzeichen in Variable

Hallo,
nachdem ich kürzlich ein Photoshop Droplet in ein batchfile eingebunden habe um einen überwachten Ordner zum Konvertieren von Bilddateien zu haben möchte ich das nun mit imagemagick (convert) realisieren.


rem @echo off
cls
cd c:\test

FOR %%a IN (c:\test\unprocessed\*.tif) DO convert %%a "c:\test\processed\%%~na.jpg" & del %%a

Das funktioniert auch schon sehr gut, allerdings gibt es Probleme mit Dateien die Leerzeichen enthalten, die werden als zwei einzelne angesehen und convert findet sie nicht. Ich hab schon mit Anführungszeichen an verschiedensten Stellen probiert aber komme da nicht weiter.
Eine weitere Frage ist folgende, ich löse das script periodisch aus, wenn das erste script noch läuft und dann die nächste Instanz gestartet wird werden zwar alle Bilder konvertiert, aber es hagelt Fehlermeldungen, (Datei entweder schon vom anderen scriptlauf verarbeitet und gelöscht wird nicht daher gefunden, oder ist gerade geöffnet).
Gibt es eine Möglichkeit das Script nur dann zu starten wenn keine andere Instanz läuft oder wie kann man diesen Konflikt lösen?

Vielen Dank für Eure Ideen

Arne

Content-Key: 48347

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

Printed on: April 24, 2024 at 10:04 o'clock

Member: maneich
maneich Jan 09, 2007 at 18:34:50 (UTC)
Goto Top
Hallo,

normalerweise sollte es genügen, wenn Du %%a hinter Covert in Hochkomma setzt.
Sollte das nicht gehen, in einer Unterroutine (call) die Tif-Datei von dem Dateipfad trennen und mit Hochkomma dann wieder anzufügen und danach Covert starten.

Was Deine zweite Frage anbelangt:

Sind es zwei Batches womit Du Probleme bekommst, rufe diese mit "call" auf; also
call Batch1.bat
call Batch2.bat
Damit wird nur dann zur weiten Batch gewechselt wenn die erste abgearbeitet ist.

Aber Vorsicht, wird ein Programm in der ersten Batch gestartet, wird nicht gewartet bis das Programm abgearbeitet ist, sondern direkt nach einleiten des Startvorgangs zur nächten Zeile gesprungen. Hier kann man sich helfen mit
start /w programm_x.
Die Batch macht erst dann weiter, wenn dieses Programm beendet ist.

MfG maneich
Member: miniversum
miniversum Jan 09, 2007 at 19:27:47 (UTC)
Goto Top
Versuchs mal so:

rem @echo off
If exist "%temp%\Flag.file" goto :ende
echo. > %temp%\Flag.file

cls
cd c:\test

FOR %%a IN (c:\test\unprocessed\*.tif) DO convert "%%a" "c:\test\processed\%%~na.jpg" & del "%%a"

del "%temp%\Flag.file"
:ende

Hier wird zu Begin im temponären Ordner eine Datei "Flag.file" erzeugt und am Ende der Batch wieder gelöscht. Zuvor wird geprüft ob die Datei schon existiert sollte dies der fall sein (Verarbeitung läuft dann ja noch) einfach ans ende gesprungen. Alternativ kannst du wenn es dir leiber ist auch vor die If abfage springen, dann würde die Batch warten bis die vorherige Verarbeitung beendet ist.

miniversum
Member: arnito
arnito Jan 09, 2007 at 21:36:15 (UTC)
Goto Top
funktioniert prächtig, vielen Dank!

Arne