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-Key: 357466

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: Kriegstreiber
Kriegstreiber Dec 08, 2017 at 04:08:06 (UTC)
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
Member: bastla
Solution bastla Dec 08, 2017 at 12:00:26 (UTC)
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
Member: Kriegstreiber
Kriegstreiber Dec 08, 2017 updated at 16:21:33 (UTC)
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