thinksmart
Goto Top

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:

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. :/

Content-Key: 190084

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

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

Member: mathe172
mathe172 Aug 23, 2012 at 12:27:23 (UTC)
Goto Top
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:
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
Member: ThinkSmart
ThinkSmart Aug 23, 2012 at 12:46:01 (UTC)
Goto Top
Abgesehen davon, dass ich gemerkt habe, dass ich %~n brauche und nicht %~nf funktioniert die Lösung leider nicht. :/

Errorcode:

The following usage of the path operator in batch-parameter substitution is invalid: %~n"  
Member: mathe172
mathe172 Aug 23, 2012 at 13:15:03 (UTC)
Goto Top
Hallo,

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 face-wink
Member: pieh-ejdsch
pieh-ejdsch Aug 23, 2012 at 15:05:23 (UTC)
Goto Top
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.
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
Member: ThinkSmart
ThinkSmart Sep 17, 2012 at 14:12:42 (UTC)
Goto Top
entschuldigung für die späte Rückmeldung, dank der Tipps hab ichs hinbekommen ;) Danke!