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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 48347
Url: https://administrator.de/contentid/48347
Ausgedruckt am: 22.11.2024 um 21:11 Uhr
3 Kommentare
Neuester Kommentar
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
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
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
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