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-ID: 190084

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

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

mathe172
mathe172 23.08.2012 um 14:27:23 Uhr
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
ThinkSmart
ThinkSmart 23.08.2012 um 14:46:01 Uhr
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"  
mathe172
mathe172 23.08.2012 um 15:15:03 Uhr
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
pieh-ejdsch
pieh-ejdsch 23.08.2012 um 17:05:23 Uhr
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
ThinkSmart
ThinkSmart 17.09.2012 um 16:12:42 Uhr
Goto Top
entschuldigung für die späte Rückmeldung, dank der Tipps hab ichs hinbekommen ;) Danke!