(BATCH:) Zeilenweise Txt auslesen und in eine Variable speichern
Hallo Leute,
Ich weiß, es ist ein alter Hut, aber ich habe da ein paar Fragen bezüglich der for-Schleife und dem zeilenweise txt auslesen.
Bezug: EINE Zeile aus TXT-Datei auslesen
Leider funktioniert der Code bei mir nicht für Zeile eins. Habe daraufhin auf n-te Zeile in %var% speichern zurückgegriffen (findet ihr nochmals unten). Jetzt habe ich eine Frage: Gibt es ne Möglichkeit direkt in eine Variable zu speichern, ohne den Zwischensprung in :setvarFixLine? Wenn ja wie?
Es geht mir im Speziellem darum, dass ich in eine txt Datei sowas in der Art aufbauen möchte:
main:
F:\Programme\Temp
Test1:
F:\Programme\Temp\T1
Test2:
F:\Programme\Temp\T2
Diese Pfade werden aus einer Variable übergeben, die der User vorher mit set /p setzt. Jetzt möchte ich beim Starten schauen, ob es eine Textdatei mit dem Namen Version.txt gibt und wenn ja, dass dann NUR die Pfade aus der txt genommen werden und in eine Variable, z.B. %variable% übergeben werden. Könnte jemand mir vielleicht :setvarFixLine erklären, da ich da nicht so ganz durchblicke.
Auch wenn ich den Code für die n-te Zeile weiter verschachtel, erkennt er die Variable plötzlich nicht mehr und gibt mir "" aus.
Wäre echt nett, falls jemand für mein Problem Zeit findet und mir da raus hilft. Ich danke schon mal im Voraus,
Ninced
Hier der Code von dem ersten Beitrag:
Ich weiß, es ist ein alter Hut, aber ich habe da ein paar Fragen bezüglich der for-Schleife und dem zeilenweise txt auslesen.
Bezug: EINE Zeile aus TXT-Datei auslesen
Leider funktioniert der Code bei mir nicht für Zeile eins. Habe daraufhin auf n-te Zeile in %var% speichern zurückgegriffen (findet ihr nochmals unten). Jetzt habe ich eine Frage: Gibt es ne Möglichkeit direkt in eine Variable zu speichern, ohne den Zwischensprung in :setvarFixLine? Wenn ja wie?
Es geht mir im Speziellem darum, dass ich in eine txt Datei sowas in der Art aufbauen möchte:
main:
F:\Programme\Temp
Test1:
F:\Programme\Temp\T1
Test2:
F:\Programme\Temp\T2
Diese Pfade werden aus einer Variable übergeben, die der User vorher mit set /p setzt. Jetzt möchte ich beim Starten schauen, ob es eine Textdatei mit dem Namen Version.txt gibt und wenn ja, dass dann NUR die Pfade aus der txt genommen werden und in eine Variable, z.B. %variable% übergeben werden. Könnte jemand mir vielleicht :setvarFixLine erklären, da ich da nicht so ganz durchblicke.
Auch wenn ich den Code für die n-te Zeile weiter verschachtel, erkennt er die Variable plötzlich nicht mehr und gibt mir "" aus.
IF exist Test.txt (
Set /a "cnt=1"
Set /a "n=1"
for /F "Tokens=*" %%i in (Version.txt) do call :setvarFixLine %n% "%%i"
Echo n-te Zeile, n=%n%: %Var%
pause
goto :eof
:setvarFixLine
If %cnt%==%1 Set "Var=%~2"
echo "%Var%"
Set /a "cnt+=1"
goto :eof
pause
Wäre echt nett, falls jemand für mein Problem Zeit findet und mir da raus hilft. Ich danke schon mal im Voraus,
Ninced
Hier der Code von dem ersten Beitrag:
:: n-te Zeile in %var% speichern; n ist im Beispiel 1
Set /a "cnt=1"
Set /a "n=1"
for /F "Tokens=*" %%i in (Version.txt) do call :setvarFixLine %n% "%%i"
Echo n-te Zeile, n=%n%: %Var%
:: Set var=
pause
goto :eof
~~~
:setvarFixLine
If %cnt%==%1 Set "Var=%~2"
echo "%Var%"
Set /a "cnt+=1"
goto :eof
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 269892
Url: https://administrator.de/forum/batch-zeilenweise-txt-auslesen-und-in-eine-variable-speichern-269892.html
Ausgedruckt am: 09.05.2025 um 12:05 Uhr
20 Kommentare
Neuester Kommentar
Hey, versuch es mal damit:
Gruss, Endoro
@echo off &setlocal disabledelayedexpansion
set "FName=test.txt"
set "n=1 2 3 8 19"
for /f "tokens=1*delims==" %%a in ('set . 2^>nul') do set "%%~a="
for /f "delims=" %%a in ('findstr /n "^" "%FName%"') do (
for /f "delims=:" %%b in ("%%~a") do (
for %%c in (%n%) do (
if "%%~b"=="%%~c" (
set "line=%%~a"
set "nr=0000000000%%~b"
setlocal enabledelayedexpansion
set "line=!line:*:=!"
set "nr=!nr:~-10!"
set ".!nr!=!line!"
for /f "tokens=1*delims==" %%d in ('set .') do (
(if "!"=="" endlocal)&set "%%~d=%%~e"
)
)
)
)
)
for /f "tokens=1*delims==" %%a in ('set .') do echo(%%~b
Hey, da lag ein Mißverständnis vor 
Versuchs mal so:
Gruß, Endoro
Versuchs mal so:
@echo off &setlocal disabledelayedexpansion
set "FName=test.txt"
for /f "usebackq" %%a in ("%FName%") do (
if defined Fmain set "main=%%~a" &set "Fmain="
if defined Ftest1 set "test1=%%~a" &set "Ftest1="
if defined Ftest2 set "test2=%%~a" &set "Ftest2="
if /i "%%~a"=="main:" set "Fmain=True"
if /i "%%~a"=="Test1:" set "Ftest1=True"
if /i "%%~a"=="Test2:" set "Ftest2=True"
)
echo main: "%main%"
echo test1 "%test1%"
echo test2 "%test2%"
Ja, stimmt. Dann musst du darauf achten, dass hinter "main:" usw. kein Leerzeichen steht. Sonst kommen noch drei Forschleifen dazu.
Gruss, Endoro
@echo off &setlocal disabledelayedexpansion
set "FName=test.txt"
for /f "usebackqdelim=" %%a in ("%FName%") do (
if defined Fmain set "main=%%~a" &set "Fmain="
if defined Ftest1 set "test1=%%~a" &set "Ftest1="
if defined Ftest2 set "test2=%%~a" &set "Ftest2="
if /i "%%~a"=="main:" set "Fmain=True"
if /i "%%~a"=="Test1:" set "Ftest1=True"
if /i "%%~a"=="Test2:" set "Ftest2=True"
)
echo main: "%main%"
echo test1 "%test1%"
echo test2 "%test2%"
Das ist der geänderte Code, um Leerzeichen einzulesen.
In deinem Code oben springst du in Zeile 31 nach
Zeile 44, 51 ... wenn du was in die Datei schreiben willst, geht das so wie du es oben richtig gemacht hast:, um sicherzugehen, dass keine ungewollten hängenden Leerzeichen in die Datei geschrieben werden, schreib es so: . So wie du es geschrieben hast, landet es in der Standardfehlerausgabe. Versuch es einfach selbst und schau, was in
Gruß, Endoro
PS: es gilt für die Zeilen 45 und 52, bei den anderen ist ein Doppelpunkt dazwischen.
In deinem Code oben springst du in Zeile 31 nach
checkforfile
, das nirgens definiert ist.Zeile 44, 51 ... wenn du was in die Datei schreiben willst, geht das so wie du es oben richtig gemacht hast:
>>Version.txt echo Test 2:
>>Version.txt (echo( Test 2:)
echo Test 2>>test.txt
test.txt
drinsteht (absolut nichts).Gruß, Endoro
PS: es gilt für die Zeilen 45 und 52, bei den anderen ist ein Doppelpunkt dazwischen.
Hey,
du solltest dir ansehen, was du in dem IF Statement prüfst, ob das überhaupt gleich sein kann. ZB so:. Zum Tutorial zur Forschleife geht es hier lang.
Gruss, Endoro
du solltest dir ansehen, was du in dem IF Statement prüfst, ob das überhaupt gleich sein kann. ZB so:
echo "%rend:~-3%" "%adh:~-3%"
Gruss, Endoro
Hey,
Wenn ich das nachbaue, sind die beiden Ausdrücke
Gruß, Endoro
Jap das macht er. Die vorherige if schleife in der ich das prüfe, läuft auch durch. Deswegen verstehe ich den Fehler ja auch nicht.
Wenn ich das nachbaue, sind die beiden Ausdrücke
"%rend:~-3%"
und "%adh:~-3%"
nie gleich. Deshalb solltest du mal darstellen, was deine Variablen vor dem IF
enthalten. echo c: "%c%" test: "%test%" test2: "%test2%" rend: "%rend%" rend-3: "%rend:~-3%" variable: "%variable%" adh: "%adh%" adh-3: "%adh:~-3%"