Hallo whine,
eigentlich hast Du alle Bausteine.
Mit ein paar Ergänzungen:
for /f "delims=" %%a in ('dir /a-d /b "%eps%\*.*"')
Dieser Befehl ruft DIR auf, um eine Verzeichnisliste zu erstellen, und interpretiert dann die Ausgabe von DIR. Das ist aber von hinten durch die Brust ins Auge, sowas kann FOR ganz alleine. Es ist dann auch hilfreich, die Suche auf Dateien mit eps-Extension zu begrenzen.
So geht's: FOR %%a in ("%eps%\*.eps") DO ...
%%a enthält nun nacheinander die EPS-Dateinamen, inclusive Pfad.
Beachte, dass FOR /F %%a IN ("*.eps") DO
etwas ganz anderes ist als FOR %%a in ("*.eps") DO
. Die /F Option bewirkt, dass Datein nicht aufgelistet werden, sondern ihr Inhalt eingelesen, und wenn dann die IN Angabe in "Anführungszeichen" steht, wird sie nicht als Dateiname sondern als einfacher Text interpretiert. Steht sie in 'einfachen' Anführungszeichen, wird sie als CMD-Befehl interpretiert, dessen Standardausgabe dann gelesen wird. Ohne Anführungszeichen wird ein Dateiname (ohne Muster) erwartet.
Ohne /F muss die IN Angabe ein oder mehrere Dateimuster enthalten, und dann dienen die doppelten Anführungszeichen dazu, Leerstellen in Dateinamen darstellen zu können. FOR %%a IN (a1.eps a2.eps)
verarbeitet zwei Dateien. FOR %%a IN ("a1.eps a2.eps")
verarbeitet eine Datei mit Namen "a1.eps a2.eps".
Eine Anleitung zum FOR Befehl bekommst Du auf der Windows Befehlszeile mit HELP FOR, oder hier. Vergiss die deutsche Version, die scheint maschinell übersetzt.
- Zerlegen von Dateinamen
Da hast Du schon den richtigen Ansatz, aber %%~a
ist unvollständig. Wenn %%a
ein for-Parameter ist, dann aktiviert %%~a
die Zerlegungsoptionen, aber ohne weitere Parameter entfernt es nur eventuell vorhandene Anführungszeichen. Das ist bei FOR überflüssig weil da nie Anführungszeichen kommen.
Was Du brauchst, ist %%~na
. n steht für Name. Entscheidend ist, dass da kein p (für Pfad) und kein x (für eXtension) steht. Aus C:\EPS_FILES\FOO.EPS
wird mit diesen Modifiziereren FOO
, und da musst Du für den EXIST Test nur noch .svg dahinterschreiben.
FOR %%a in ("%eps%\*.eps") do (
IF NOT EXIST "%svg%\%%~na.svg" COPY "%%a" "%result%"
)
(Edit: fehlendes Anführungszeichen ergänzt)
Der FOR Befehl ist ein extrem zickiges Biest, ich weiß. Und er ist seit seine Erfindung in frühen MS DOS Versionen nur zickiger geworden. Allein schon die doppelten Anführungszeichen für die FOR Variable sind nervig, aber das ist der CMD Syntax geschuldet, die Variablen mit einfachen % schon auflöst bevor der ausgeführte Befehl die Variable auch nur zu sehen bekommt. Man schreibt %%, weil das der CMD-Weg ist um die Variablenauflösung zu umgehen und ein einzelnes % zu bekommen. Und dieses wird dann vom FOR Befehl als Parameter-Marker verwendet. Deswegen schreibt man, wenn man FOR von Hand auf der Befehlszeile ausführt, FOR %a IN (...) DO statt FOR %%a IN (...). Aber wer macht sowas schon außer ein paar Hardcore-Batchern aus den 80er Jahren 😂
Die Alternative zu CMD ist Powershell, aber da hat man eine noch steilere Lernkurve als bei CMD zu erklimmen...
Rolf
sumpsi - posui - obstruxi