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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: maneich
maneich 09.01.2007 um 19:34:50 Uhr
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
Mitglied: miniversum
miniversum 09.01.2007 um 20:27:47 Uhr
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
Mitglied: arnito
arnito 09.01.2007 um 22:36:15 Uhr
Goto Top
funktioniert prächtig, vielen Dank!

Arne