kriegstreiber
Goto Top

1 Token aus einer TXT auslesen für jede Zeile und als Variable in Schleife nutzen

Die Beschreibung wird schwer was ich vorhabe. Ich versuchs mal zu erklären. Im Vorfeld ein Auszug der Textdatei:

5E6153412EC01B15710F4D249771E416 EP0001-BLES00157_00-HAZEDLC100081450
FA1F3FFE65D9A5D3C680C73C73732BA4 EP0001-BLES00164_00-HAZEDLC100081450
69098A03A94276753714E28E48AF2512 EP0001-BLES00324_00-UBIFC2DLCPACK001
4D928968B0B84A5506458EA6C9CFEE3C EP0001-BLES00389_00-POP0DLCEPILOGUE1
B4F552E1F6BFDD436994A8A4F28C20D9 EP0001-BLES00403_00-PSHAUNWHIT000003
BDA2241506872D1456873DD90671A37B EP0001-BLES00403_00-PSHAUNWHIT000004
7700FF04770842D2C8BC5D9804FEC341 EP0001-BLES00403_00-SWSNOWDLCGEARS01
BD29ED1512C56781D5225D808B213F95 EP0001-BLES00669_00-AC2DLCSEQ1200001
331D9E3459587CC1412AC5A271C70C8D EP0001-BLES00669_00-AC2DLCSEQ13LGS01
E8CF94B46FE2CF67B8A305C2A4EB8F1E EP0001-BLES00669_00-AC2UPLAYTHEME001
0F2E6EB973F894B0271AC346C3732707 EP0001-BLES00909_00-AC2DLC4000000001

Ich möchte jetzt folgendes tun (exemplarisch)

test.exe -FA1F3FFE65D9A5D3C680C73C73732BA4

Sollte der Token richtig sein bekomme ich eine Datei heraus (checkfile.ok), falls nicht dann nicht. Bekomme ich keine Datei soll er weitermachen mit dem ersten Token der 2ten Zeile

test.exe -69098A03A94276753714E28E48AF2512

Das ganze soll solange weitergehen bis die ganze Datei abgearbeitet ist, oder die Datei existiert. Diese Dateikontrolle per "If exist" in die Schleife zu setzen ist kein Problem, nur weiss ich nicht wie ich so eine komplexe Schleife erstellen soll.

Also:

-Die Schleife soll den ersten Token in jeder Zeile auslesen bis zum Ende der Datei
-Ich muss das eingelesene auch als Variable nutzen können

Falls das möglich ist, vielen Dank im vorraus.

Content-Key: 357588

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

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: 134464
134464 09.12.2017 aktualisiert um 09:28:18 Uhr
Goto Top
Da reicht ein findstr
findstr /bc:"FA1F3FFE65D9A5D3C680C73C73732BA4 " "C:\datei.txt"  
Wenn du das Ergbenis weiterverarbeiten willst, in einer For-Schleife aufsplitten
for /f "tokens=1-2" %%a in ('findstr /bc:"FA1F3FFE65D9A5D3C680C73C73732BA4 " "C:\datei.txt" 2^>nul') do  
    echo Teil1 = %%a
    echo Teil2 = %%b
)
Ich würde mich lieber mal mit was aktuellem wie Powershell beschäftigen als mit diesen Batch-Leichen aus den 80igern ...
Mitglied: rubberman
rubberman 09.12.2017 um 14:17:19 Uhr
Goto Top
Etwa so:
@echo off &setlocal
2>nul del "checkfile.ok"  
set "var="  
for /f %%i in ('type "test.txt"') do (  
  call "test.exe" -%%i  
  if exist "checkfile.ok" (  
    set "var=%%i"  
    goto exitloop
  )
)
:exitloop
if defined var (echo %var%) else echo nicht gefunden
pause
Steffen
Mitglied: Kriegstreiber
Kriegstreiber 09.12.2017 aktualisiert um 19:45:38 Uhr
Goto Top
Hi Steffen,

erstmal Danke das Grundkonzept funktioniert. Es hakt mir nur an 2 Stellen zur Zeit.

Variablen die ich vorher festgelegt habe, werden in deiner Schleife nicht aufgelöst. Seltsamerweise nur bei dieser Schleife, da ich etliche FOR Schleifen habe wo dies passiert. Problem 2, wenn keiner der TOKENS passt rast er bis zum Tag des jüngsten Gerichts durch. Meine Idee hier, den ersten Token als Variable setzen und beim "Suchlauf soll er beenden wenn er wieder diesen nutzt. Falls es weiterhilft, ich muss mit Delayed Expansion arbeiten, wegen dem nichtauflösen der Variablen.

BEISPIEL:

	@echo on
	echo CONTENT1=!CONTENT!
	if exist "TMP\%%~nI.DAT" del "TMP\%%~nI.DAT"  
	FOR /f %%A in ('type "KLICS\klics.txt"') do (  
		echo TOKEN=%%A
		echo CONTENT2=!CONTENT!
		pause
		pause
		make_test -v -d "TMP\%%~nI.EDAT" "TMP\%%~nI.DAT" 8 "%%A" "RAPS\%content%.rap" >nul  
		if exist "TMP\%%~nI.DAT" (  
			set "var=%%A"  
			echo %var%
			echo CONTENT3=!CONTENT!
			pause
		)
	)

Gibt mir als Ausgabe:

CONTENT1=EP4133-BLES02108_00-JCBPACKXXXXXXXXX <-- Variable mit !content! aufgelöst

E:\TEST>(
echo TOKEN=00000000000000000000000000000000
echo CONTENT2=!CONTENT!
pause
pause
C:\make_test -v -d "TMP\DLC.EDAT" "TMP\DLC.DAT" 8 "00000000000000000000000000000000" "RAPS\NONE.rap" 1>nul <<-- NONE sollte !CONTENT! sein , ganz am Anfang der BAT habe ich es als NONE deklariert.
if exist "TMP\DLC.DAT" (
set "var=00000000000000000000000000000000"
echo
echo CONTENT3=!CONTENT!
pause
)
)
TOKEN=00000000000000000000000000000000
CONTENT2=EP4133-BLES02108_00-JCBPACKXXXXXXXXX

Gruss Tim
Mitglied: rubberman
rubberman 10.12.2017 aktualisiert um 13:54:52 Uhr
Goto Top
Hallo Tim,

irgendwie fehlen mir da die Zusammenhänge. Ist das ganze tiefer verschachtelt (wie deine Einrückung vermuten lässt) und hast du FOR Variable %%A schon in einer der äußeren Schleifen verwendet? Dass du Variablen in Ausrufezeichen den Variableninhalt nicht sofort ausgegeben bekommst, ist in Schleifen normal. Erst wenn das ECHO Kommando tatsächlich ausgeführt wird, siehst du den Inhalt. Ansonsten wird bei eingeschaltetem Prompt (ECHO ON) erst einmal nur die Kommandozeile bzw. der (in Klammern eingefasste) Block von Kommandozeilen angezeigt, der abgearbeitet wird. Das wird bei tief verschachtelten Strukturen schnell unübersichtlich.

Einfaches Beispiel:
@echo off &setlocal EnableDelayedExpansion
set "foo=bar"  

echo on
for /l %%i in (1 1 3) do (
  echo foo=!foo!
  echo foo=%foo%
  set num=%%i
  echo num=!num!
  echo ~~~~~~~~~
)

pause

Ausgabe:
C:\Users\steffen\Desktop>for /L %i in (1 1 3) do (
echo foo=!foo!
 echo foo=bar
 set num=%i
 echo num=!num!
 echo ~~~~~~~~~
)

C:\Users\steffen\Desktop>(
echo foo=!foo!
 echo foo=bar
 set num=1
 echo num=!num!
 echo ~~~~~~~~~
)
foo=bar
foo=bar
num=1
~~~~~~~~~

C:\Users\steffen\Desktop>(
echo foo=!foo!
 echo foo=bar
 set num=2
 echo num=!num!
 echo ~~~~~~~~~
)
foo=bar
foo=bar
num=2
~~~~~~~~~

C:\Users\steffen\Desktop>(
echo foo=!foo!
 echo foo=bar
 set num=3
 echo num=!num!
 echo ~~~~~~~~~
)
foo=bar
foo=bar
num=3
~~~~~~~~~

C:\Users\steffen\Desktop>pause
Drücken Sie eine beliebige Taste . . .
Der erste Block ist der Prompt der gesamten Schleife, danach erfolgen die Blöcke des Prompts des Schleifenrumpfes für jede Iteration, immer direkt gefolgt von der tatsächlichen ECHO Ausgabe. Wie du siehst, werden Variableninhalte auch im Prompt zum Wert aufgelöst, wenn sie in Prozentzeichen eingefasst sind (Voraussetzung ist, dass sie vor der Schleife definiert wurden). Bei Variablen die in Ausrufezeichen eingefasst sind, siehst du im Prompt noch keinen Wert.

Steffen
Mitglied: Kriegstreiber
Kriegstreiber 17.12.2017 aktualisiert um 15:50:52 Uhr
Goto Top
Danke für eure Hilfe, leider führte kein Weg auf diese Weise zum Erfolg. Allerdings konnte ich ein kleines Tool in den weiten des www finden, das genau das macht. Also Problem auf andere Weise gelöst face-smile