CMD FOR IN Variable, String kürzen mit der Variable
Hi,
Ich sitze da jetzt nun länger dran, und es will einfach nicht funktionieren.
Es geht um eine FOR Schleife in der Ich ein Verzeichnis nach bestimmten Dateien abfrage und aus diesen Dateien muss ich ein neues Programm starten + Parameter übergeben.
Also der Code sieht folgendermaßen aus (Variablen für VERZ1, VERZ2, und der 1. übergebene Parameter sind gesetzt:
Der Fehler liegt glaube ich in dem Setzen des neuen Dateinamens. Beim Starten von NeuesProgramm wird der 2. Parameter nur als \XSW\.xml übergeben. Also ist Filename leer.
Ich hoffe Ihr könnt mir kurz helfen, ich glaube es ist einfach nur ein kurzer Denkfehler, aber ich komme nicht von weg. :/
Ich sitze da jetzt nun länger dran, und es will einfach nicht funktionieren.
Es geht um eine FOR Schleife in der Ich ein Verzeichnis nach bestimmten Dateien abfrage und aus diesen Dateien muss ich ein neues Programm starten + Parameter übergeben.
Also der Code sieht folgendermaßen aus (Variablen für VERZ1, VERZ2, und der 1. übergebene Parameter sind gesetzt:
for /f %%f in ('dir /b %VERZ2%*_%1_xml.zip') do (
REM Das funktioniert so weit
call %VERZ1%unzip.exe -o -j %VERZ2%%%~nf.zip -d %1\
REM Hier möchte ich das den letzten Teil des Dateinamens nach dem ich in der Schleife gefiltert habe
REM entfernen. Z.B. aus X:\TMP\abc_XSW_xml.zip sollte abc werden.
SET FILENAME=%%~nf:_%1_xml=%
call %VERZ1%NeuesProgramm.exe %VERZ2%%%~nf.zip \%1\%FILENAME%.xml
)
Der Fehler liegt glaube ich in dem Setzen des neuen Dateinamens. Beim Starten von NeuesProgramm wird der 2. Parameter nur als \XSW\.xml übergeben. Also ist Filename leer.
Ich hoffe Ihr könnt mir kurz helfen, ich glaube es ist einfach nur ein kurzer Denkfehler, aber ich komme nicht von weg. :/
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 190084
Url: https://administrator.de/contentid/190084
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo,
dein Problem ist, dass du ohne delayedExpansion keine Variablen innerhalb der Schleife ändern kannst.
Ohne es jetzt ausprobiert zu haben, würde ich in etwa folgendes Vorschlagen:
Mathe172
dein Problem ist, dass du ohne delayedExpansion keine Variablen innerhalb der Schleife ändern kannst.
Ohne es jetzt ausprobiert zu haben, würde ich in etwa folgendes Vorschlagen:
REM delayedexpansion einschalten
setlocal enabledelayedexpansion
for /f %%f in ('dir /b %VERZ2%*_%1_xml.zip') do (
call %VERZ1%unzip.exe -o -j %VERZ2%%%~nf.zip -d %1\
call :SetFilename "%~nxf"
call %VERZ1%NeuesProgramm.exe %VERZ2%%%~nf.zip \%1\!FILENAME!.xml
)
goto :eof
:SetFilename
for /f "delims=_" %%A in ("%~1") do set "FILENAME=%%A"
goto :eof
Mathe172
Hallo,
da ist mir leider ein Fehler unterlaufen... folgendes sollte funktionieren (in Zeile 7 %~nxf auf %%~nf geändert)
Mathe172
P.S.:Ich wüsste nicht, was du mit %~n anfangen willst
da ist mir leider ein Fehler unterlaufen... folgendes sollte funktionieren (in Zeile 7 %~nxf auf %%~nf geändert)
REM delayedexpansion einschalten
setlocal enabledelayedexpansion
for /f %%f in ('dir /b %VERZ2%*_%1_xml.zip') do (
call %VERZ1%unzip.exe -o -j %VERZ2%%%~nf.zip -d %1\
call :SetFilename "%%~nf"
call %VERZ1%NeuesProgramm.exe %VERZ2%%%~nf.zip \%1\!FILENAME!.xml
)
goto :eof
:SetFilename
for /f "delims=_" %%A in ("%~1") do set "FILENAME=%%A"
goto :eof
Mathe172
P.S.:Ich wüsste nicht, was du mit %~n anfangen willst
moin,
bei Stringsubstitition wird ja gerne delayedexpansion oder eine Subroutine benutzt.
In dem Fall würde ich aber auf beides Verzichten und Zwei Schleifchen binden:
Da Hier ja ab dem Unterstrich der Rest Verworfen wird.
Gruß Phil
bei Stringsubstitition wird ja gerne delayedexpansion oder eine Subroutine benutzt.
In dem Fall würde ich aber auf beides Verzichten und Zwei Schleifchen binden:
Da Hier ja ab dem Unterstrich der Rest Verworfen wird.
for /f %%f in ('dir /b %VERZ2%*_%1_xml.zip') do (
call %VERZ1%unzip.exe -o -j %VERZ2%%%~nf.zip -d %1\
for /f "delims=_" %%i in ("%%~nf") do call %VERZ1%NeuesProgramm.exe %VERZ2%%%~nf.zip \%1\%%~i.xml
)
exit /b
Gruß Phil