Zeilenweise auslesen und in Variablen speichern
Hallo erstmal.
Ich hab schon zig einträge dieser Art hier gefunden und trozdem... bin ich wieder da...
Ich hab das Script von einem anderen Thread hier übernommen und in der Test-Bat funktioniert dies auch Tip Top, nur meine implementierung in das Hauptscript will einfach nicht hinhauen...
Original:
Meine Implementierung:
Er scheint zwar zu erkennen, dass das Dokument nur zwei Zeilen besitzt jedoch habe ich in der Ausgabe schlussendlich zwei gleiche Einträge (der ersten Zeile) in meiner tmp. Daher auch meine Annahme, dass er die Zeilenanzahl richtig erkennt...
Ich seh langsam den Wald vor lauter Bäumen nicht... Ich sehe in den Wesentlichen Befehlen der zwei Scripts keine Unterschiede...
Wo zum Kuckuck hab ich da mist gebaut? ^^
Grüsse Apop
P.S:
Die wbat-Befehle sind aus dem Batch-Utility WBAT
Ich hab schon zig einträge dieser Art hier gefunden und trozdem... bin ich wieder da...
Ich hab das Script von einem anderen Thread hier übernommen und in der Test-Bat funktioniert dies auch Tip Top, nur meine implementierung in das Hauptscript will einfach nicht hinhauen...
Original:
@echo off
set line=
set /a count=0
FOR /f "delims=" %%f IN ('type "test.txt"') DO call :ProcessLine "%%f"
exit
:ProcessLine
if %count%==0 goto :NewLine
set /a count+=1
If %count% GTR 1 goto :NewLine
goto :eof
:NewLine
If %count% neq 0 echo %count% - %line% - %workflow%
set "line=%~1"
set /a count=1
goto :eof
Meine Implementierung:
.
.
.
:LISTUSER
if exist %tmp%\rlh.tmp del %tmp%\rlh.tmp
if not exist %tmp%\userlist.tmp copy NUL %tmp%\userlist.tmp >NUL
if not exist %tmp%\rlh.tmp copy NUL %tmp%\rlh.tmp >NUL
wbat cls (+white on +red) ! text 0 :title #%zpos% +5
wbat text (black on +white) 12,28 "Datenbank wird ausgelesen..."
set /a counter=0
set zeile=
for /f "delims=" %%f IN ('type "%cd%\user\system.cry"') DO call :WORKFLOW "%%f"
goto USERLIST
:WORKFLOW
if %counter% == 0 goto WORKFLOW2
set /a counter+=1
if %counter% GTR 1 goto WORKFLOW2
goto :eof
:WORKFLOW2
if defined zeile echo %zeile% >>%tmp%\rlh.tmp
set suchstr=%zeile:~-21%
for /f "tokens=1-2 delims=-" %%i in ('findstr "%suchstr%" "%tmp%\rlh.tmp"') do (
set "liID=%%i"
set "cryptli=%%j"
)
set "zeile=%~1"
set /a counter=1
set... definitionen für %liname% und %linaname%
rem -- Ausgang für Suche nach einer bestimmten Zeile ----
if "%wbat%" == "%liname% %linaname%" goto USERINFO
rem ----------------------------------------------------
>>%tmp%\userlist.tmp echo %liname% %linaname% --> Auflistung der gefundenen Zeilen
goto :eof
.
.
.
Er scheint zwar zu erkennen, dass das Dokument nur zwei Zeilen besitzt jedoch habe ich in der Ausgabe schlussendlich zwei gleiche Einträge (der ersten Zeile) in meiner tmp. Daher auch meine Annahme, dass er die Zeilenanzahl richtig erkennt...
Ich seh langsam den Wald vor lauter Bäumen nicht... Ich sehe in den Wesentlichen Befehlen der zwei Scripts keine Unterschiede...
Wo zum Kuckuck hab ich da mist gebaut? ^^
Grüsse Apop
P.S:
Die wbat-Befehle sind aus dem Batch-Utility WBAT
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 205033
Url: https://administrator.de/forum/zeilenweise-auslesen-und-in-variablen-speichern-205033.html
Ausgedruckt am: 25.12.2024 um 13:12 Uhr
11 Kommentare
Neuester Kommentar
Ich habe grad mal ohne Probleme eine TXT mit 10.000 Zeilen und 50 Buchstaben / Zeile eingelesen. Wie gross ist deine TXT? Was hast du für ein System?
Gruss!
"userID" und "rest" könnte gleich am Anfang getrennt werden, wenn ein "-" dazwischen ist:
Gruss!
@echo off&setlocal
for /f "tokens=1-3delims=:-" %%i in ('^< file.txt findstr /n "^"') do set "userid%%i=%%j"&set "rest%%i=%%k"& set /a cnt+=1
for /l %%i in (1,1,%cnt%) do (
setlocal enabledelayedexpansion
echo(userID: !userID%%i! Rest: !rest%%i!
endlocal
)
Gruss!
Hallo Apop85,
wenn sich in Batch was überraschend nicht ändert was es eigentlich sollte liegt es meistens an der fehlenden verzögerten Erweiterung. Die muss aber vorsichtig benutzt werden, weil sie Ausrufungszeichen und Carets in Variablen rückstandsfrei entfernt. Allerdings nicht rückwirkend, weshalb ich sie in Forschleifen an- und ausschalte.
Beispiel für das Wirken der verzögerten Erweiterung:
Output:
Gruss!
wenn sich in Batch was überraschend nicht ändert was es eigentlich sollte liegt es meistens an der fehlenden verzögerten Erweiterung. Die muss aber vorsichtig benutzt werden, weil sie Ausrufungszeichen und Carets in Variablen rückstandsfrei entfernt. Allerdings nicht rückwirkend, weshalb ich sie in Forschleifen an- und ausschalte.
Beispiel für das Wirken der verzögerten Erweiterung:
@echo off &setlocal
set "string1=a!!^^ ^^ b"
echo string1: "%string1%"
setlocal enabledelayedexpansion
echo string1: "!string1!" ^<--- alles noch da^^!
set "string2=%string1%"
echo string2: "%string2%" "!string2!"
set "string3=!string1!"
echo string3: "%string3%" "!string3!"
Output:
string1: "a!!^^ ^^ b"
string1: "a!!^^ ^^ b" <--- alles noch da!
string2: "a b" "a^ ^ b"
string3: "astring3"
Gruss!