kriegstreiber
Goto Top

Einen String in einer TXT finden, nur einen Teil als Variable setzen, FOR Schleife in FOR Schleife

Guten Abend alle miteinander,

nunja wenn ich hier die Sufu nutze findet man etliches zu dem Thema, aber ich habe nichts gefunden was mir weiterhilft.
Das Problem wird wohl sein, das ich mit einer FOR Schleife in einer FOR Schleife arbeiten muss. Komm ich zum Problem.

Ich habe eine Textdatei mit mehreren Zeilen. Aus einer Zeile brauche ich ein Stück. Momentan sieht das ganze so aus:

setlocal EnableDelayedExpansion
FOR /F "delims=*" %%I IN ('dir /b /s "%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\*.EDAT"') do (  
	%MYFILES%\make_npdata -v -d "%%I" 8 00000000000000000000000000000000>"%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC"  
	FOR %%A IN ("%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC") do find /I "EDAT flags: 0x0000003C" %%A>nul && SET flg=0  
	FOR %%A IN ("%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC") do find /I "EDAT flags: 0x0000000D" %%A>nul && SET flg=1  
	find /I "NPD content" "%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC" >"%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.cont"  

	rem FOR /F "tokens=* delims=*" %%A IN ('%MYFILES%\read_sfo "!TMPDIR!\PKG_EXTRACT_TMP\PARAM.SFO" CATEGORY') DO SET ps3_category=%%A >nul 2>&1  
	FOR /F "skip=2 tokens=4" %%P in ("%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.cont") do set cont=%%P  
	echo FLG=!FLG!
	echo !cont! >"%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.contid"  
)

pause
setlocal DisableDelayedExpansion

Wie ihr seht habe ich mehrere Dateien die abgearbeitet werden müssen. In diesem Prozess entsteht eine TXT Datei (%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC). In dieser TXT Datei muss ich einen String suchen und davon nur einen Teil übernehmen. Was ich bereits geschafft habe ist mit

find /I "NPD content" "%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC" >"%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.cont"  

den String schonmal in eine andere Datei auszulagern. Das ganze sieht dort etwas wüst aus...
---------- E:\TEST\PKG_EXTRACT_TMP\DLC.LCTLIC
NPD content ID: UNKNOWNBEHAVIORITHINK

Ich brauche quasi von Zeile 2 den 4rten Token und hier ist das Problem, denn

FOR /F "skip=2 tokens=4" %%P in ("%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.cont") do set cont=%%P  
	echo !cont! >"%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.contid"  

bleibt ohne Funktion, UNKNOWNBEHAVIORITHINK wird mir nicht als Variable angezeigt. !cont! ist leer.

Ich wäre super dankbar für eine Lösung, vielleicht gibt es sogar eine ohne den Umweg über eine andere Textdatei gehen zu müssen.

Grüsse Tim

Content-ID: 357466

Url: https://administrator.de/forum/einen-string-in-einer-txt-finden-nur-einen-teil-als-variable-setzen-for-schleife-in-for-schleife-357466.html

Ausgedruckt am: 06.01.2025 um 19:01 Uhr

Kriegstreiber
Kriegstreiber 08.12.2017 um 05:08:06 Uhr
Goto Top
Schande über mein Haupt , ich habe mir das gerade selber gelöst. Das Problem ist, das in einer FOR /F Schleife wo man aus einer TXT Datei einlesen will kein Pfad vorhanden sein darf, bzw dieser keine Leerzeichen haben darf und "" scheint nicht zu funktionieren.

Das ändern von :

find /I "NPD content" "%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC" >"%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.cont"   
FOR /F "skip=2 tokens=4" %%P in ("%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.cont") do set cont=%%P   

zu

find /I "NPD content" "%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.LCTLIC" >%%~nI.cont  
FOR /F "skip=2 tokens=4" %%P in (%%~nI.cont) do set cont=%%P   

führte nun zum Erfolg face-smile
bastla
Lösung bastla 08.12.2017 um 13:00:26 Uhr
Goto Top
Hallo Kriegstreiber!

Falls Du das doch einmal brauchen solltest (ungetestet):
FOR /F "skip=2 tokens=4 usebackq" %%P in ("%TMPDIR:~0,-1%\PKG_EXTRACT_TMP\%%~nI.cont") do set cont=%%P

Grüße
bastla
Kriegstreiber
Kriegstreiber 08.12.2017 aktualisiert um 17:21:33 Uhr
Goto Top
Hey das ist perfekt, danke. Ich habe mir die Option usebackq zwar angeschaut, aber nicht gecheckt das man damit wieder mit "" in der Schleife arbeiten kann. Gemerkt und für gut befunden, Merci face-smile