Bestimmte Werte aus txt-datei auslesen per batch
Hallo,
ich möchte gewisse werte aus einer textdatei auslesen per batch!
Das sind Zahlenwerte die ausgelesen werden, das heißt von einstelligen zahlen bis 5 oder mehr stellen.
also in der textdatei mit zeilenumbruch steht in zeile 15 ab zeichen 50 die zahl 55 als beispiel, wie kann ich diese zahl auslesen bzw jede zahl, die ab dieser stelle steht, egal wie viele stellen diese hat und egal ab wie viel zeichen in dieser zeile die zahl steht?
Vielen Dank
ich möchte gewisse werte aus einer textdatei auslesen per batch!
Das sind Zahlenwerte die ausgelesen werden, das heißt von einstelligen zahlen bis 5 oder mehr stellen.
also in der textdatei mit zeilenumbruch steht in zeile 15 ab zeichen 50 die zahl 55 als beispiel, wie kann ich diese zahl auslesen bzw jede zahl, die ab dieser stelle steht, egal wie viele stellen diese hat und egal ab wie viel zeichen in dieser zeile die zahl steht?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168647
Url: https://administrator.de/forum/bestimmte-werte-aus-txt-datei-auslesen-per-batch-168647.html
Ausgedruckt am: 09.04.2025 um 23:04 Uhr
26 Kommentare
Neuester Kommentar
Hallo DominikG!
Gibt es in Deiner Problemstellung auch irgend etwas Greifbares, oder ist eigentlich alles egal?
Konkreter gefragt:
Grüße
bastla
Gibt es in Deiner Problemstellung auch irgend etwas Greifbares, oder ist eigentlich alles egal?
Konkreter gefragt:
- Soll die Zahl in Zeile 15 (oder einer anderen zu identifizierenden Zeile) gesucht werden?
- Besteht die Zahl nur aus den Ziffern 0-9, oder kann sie auch ein Komma (als "." oder ","?) oder ein Vorzeichen enthalten?
- Enthält die Zeile nur eine derartige Zahl?
Grüße
bastla
Hallo,
eine etwas "hässliche" Möglichkeit wäre folgende (ungetestet):
Mathe172
eine etwas "hässliche" Möglichkeit wäre folgende (ungetestet):
@echo off & setlocal enabledelayedexpansion
set "File=C:\File.txt"
for /f "usebackq delims=" %%A in ("%File%") do (
for /f "skip=14 tokens=1* delims=0123456789" %%B in ("%%A") do (
call :ProcessLine "%%A" "%%B" "%%C"
pause
goto :eof
)
:ProcessLine
set "Line=%~1"
set "Line=!Line:%~2=!"
set "Line=!Line:%~3=!"
echo.%Line%
goto :eof
Mathe172
@mathe172
Damit hast Du meine Fragen mit "ja / ersteres / ja" beantwortet ...
Als kleine (ungetestete) "Verschönerung" (die Zerlegung hätte ich aber auch so vorgenommen
):
oder ohne "
Grüße
bastla
P.S.: Anstelle von %Line% wäre %Number% eine "sprechendere" Variable ...
Damit hast Du meine Fragen mit "ja / ersteres / ja" beantwortet ...
Als kleine (ungetestete) "Verschönerung" (die Zerlegung hätte ich aber auch so vorgenommen
@echo off & setlocal enabledelayedexpansion
set "File=C:\File.txt"
set "Line="
for /f "usebackq skip=14 delims=" %%A in ("%File%") do if not defined Line for /f "tokens=1* delims=0123456789" %%B in ("%%A") do call :ProcessLine "%%A" "%%B" "%%C"
pause
goto :eof
:ProcessLine
set "Line=%~1"
set "Line=!Line:%~2=!"
set "Line=!Line:%~3=!"
if not defined Line set "Line=nicht gefunden!"
echo.%Line%
goto :eof
delayedExpansion
":@echo off & setlocal
set "File=C:\File.txt"
set "Line="
for /f "usebackq skip=14 delims=" %%A in ("%File%") do if not defined Line for /f "tokens=1* delims=0123456789" %%B in ("%%A") do call :ProcessLine "%%A" "%%B" "%%C"
pause
goto :eof
:ProcessLine
set "Line=%~1"
call set "Line=%%Line:%~2=%%"
call set "Line=%%Line:%~3=%%"
if not defined Line set "Line=nicht gefunden!"
echo.%Line%
goto :eof
bastla
P.S.: Anstelle von %Line% wäre %Number% eine "sprechendere" Variable ...
Moin
ich hatte ein paar Probleme mit den Trennzeichen, aber es funktioniert. Vielleicht nicht elegant, aber es funktioniert
Gruß
Markus
[edit]
in Input.txt habe ich Dein Beispiel kopiert
[/edit]
ich hatte ein paar Probleme mit den Trennzeichen, aber es funktioniert. Vielleicht nicht elegant, aber es funktioniert
@echo off
for /f "delims=*" %%a in (input.txt) do call :GetLast10Char "%%a"
goto :eof
:GetLast10Char
Set Zeile=%1
Set Last11Char=%Zeile:~-11%
Set Last10Char=%Last11Char:~0,10%
for /f "tokens=2 delims=-" %%b in ("%Last10Char%") do Call :Machwat %%b
goto :eof
:MachWat
Set Zahl=%1
echo Zahl = %Zahl%
Gruß
Markus
[edit]
in Input.txt habe ich Dein Beispiel kopiert
[/edit]
Moin,
Wenn es Zeile 30 ist, kannst Du die Zeile 3 anpassen.
Bei der Umsetzung von
Gruß
Markus
diese daten stehen erst in zeile 30 oder so, das ist ja bestimmt nicht mit berücksichtigt oder?
Mein Fehler, muß ich wohl überlesen haben, oder?Wenn es Zeile 30 ist, kannst Du die Zeile 3 anpassen.
for /f "delims=* skip=30" %%a in (input.txt) do call :GetLast10Char "%%a"
Bei der Umsetzung von
oder so
reichen leider meine Kenntnisse nicht aus .....Gruß
Markus
Hallo,
sonst schau dir mal dieses Tutorial von Friemler an. Damit ist es möglich, den letzten Token zu bekommen.
Sonst, probiers mal so(@bastla: Die Zeile mit der 3 -hat nach dem letzten "_" zwei "-"):
Dieser Code gibt den Wert in allen Zeilen an
Mathe172
sonst schau dir mal dieses Tutorial von Friemler an. Damit ist es möglich, den letzten Token zu bekommen.
Sonst, probiers mal so(@bastla: Die Zeile mit der 3 -hat nach dem letzten "_" zwei "-"):
for /f "usebackq delims=" %%A in ("Input.txt") do ((for %%B in ("%%A") do (set "Last=%%B")) & (call echo.%Last%))
Mathe172
@math172
... jedenfalls sollte das auf Basis von BigWims Vorschlag realisierbar sein und auch Dein Ansatz müsste vom Prinzip her klappen - mit Anpassung einiger Details und etwas übersichtlicherer Darstellung könnte der dann zB so aussehen:
Grüße
bastla
@bastla: Die Zeile mit der 3 -hat nach dem letzten "_" zwei "-"
So genau hatte ich mir die Daten dann auch nicht angesehen - das ist eigentlich der Job des TE ...... jedenfalls sollte das auf Basis von BigWims Vorschlag realisierbar sein und auch Dein Ansatz müsste vom Prinzip her klappen - mit Anpassung einiger Details und etwas übersichtlicherer Darstellung könnte der dann zB so aussehen:
@REM mathe172 nachempfunden ;-)
@echo off & setlocal enabledelayedexpansion
for /f "usebackq skip=29 delims=" %%A in ("Input.txt") do (
set "Last=nicht gefunden"
for %%B in (%%A) do set "Last=%%B"
echo !Last!
)
bastla
Hallo,
@bastla:
Ich wollte dich und andere nur darauf hinweisen, da ich die Antwort des TO etwas irreführend fand - war in keinster Weise böse gemeint 
MfG,
Mathe172
P.S.:Notiz an mich: Ich sollte nicht mehr soviele Einzeiler abliefern, nur weil es geht und weil ich nicht Return drücken will - ist unübersichtlich
P.P.S.:Aber für das entziffern für die TE's gibts ja Bastla & Co.
@bastla:
@bastla: Die Zeile mit der 3 -hat nach dem letzten "_" zwei "-"
MfG,
Mathe172
P.S.:Notiz an mich: Ich sollte nicht mehr soviele Einzeiler abliefern, nur weil es geht und weil ich nicht Return drücken will - ist unübersichtlich
P.P.S.:Aber für das entziffern für die TE's gibts ja Bastla & Co.
@mathe172
Gegen Einzeiler habe ich grundsätzlich nix einzuwenden - aber bei mir wollte dieser wegen der fehlenden "
Grüße
bastla
war in keinster Weise böse gemeint 
Habe ich auch nicht so verstanden - ich wollte damit vor allem auf die Bringschuld des TE hinweisen ...Gegen Einzeiler habe ich grundsätzlich nix einzuwenden - aber bei mir wollte dieser wegen der fehlenden "
delayedExpansion
" und vor allem wegen der Anführungszeichen um %%A
herum (konterkarieren die gute Idee mit der Zerlegung anhand der Leerzeichen) nicht ...Grüße
bastla
Hallo DominikG!
Zu realisieren wäre es zwar etwa so (ungetestet und unter der Voraussetzung, dass die gesuchte Bezeichnung keine Kommata,Semikolons, Leerzeichen enthält):
- interessant wäre allerdings, welchen Sinn das haben soll ...
Grüße
bastla
Zu realisieren wäre es zwar etwa so (ungetestet und unter der Voraussetzung, dass die gesuchte Bezeichnung keine Kommata,Semikolons, Leerzeichen enthält):
@REM mathe172 nachempfunden ;-)
@echo off & setlocal enabledelayedexpansion
for /f "usebackq skip=29 delims=" %%A in ("Input.txt") do (
set "First="
set "Last=nicht gefunden"
for %%B in (%%A) do (
if not defined First set "First=%%B"
set "Last=%%B"
)
echo !First!=!Last!
set "!First!=!Last!"
)
Grüße
bastla
Hallo DominikG!
Eigentlich hatte ich gemeint, was es bringen solle, Variablennamen (wie "Raw_Read_Error_Rate"), die sich aus den einzulesenden Daten ergeben, zu verwenden - es sei denn, es wären gesichert immer die gleichen Zeilen (= Variablen) in der Datei, sodass im weiteren Ablauf auf diese Variablen zugegriffen werden könnte ...
Grüße
bastla
Eigentlich hatte ich gemeint, was es bringen solle, Variablennamen (wie "Raw_Read_Error_Rate"), die sich aus den einzulesenden Daten ergeben, zu verwenden - es sei denn, es wären gesichert immer die gleichen Zeilen (= Variablen) in der Datei, sodass im weiteren Ablauf auf diese Variablen zugegriffen werden könnte ...
Grüße
bastla
Hallo,
wenn ich dich richtig verstanden habe, sollte das gehen:
Für jede ID erstellt der Code eine Variable mit der Form "ID%ID%". Für deine bräuchtest du jetzt: "%ID1%" "%ID5%" "%ID10%" ...
Der Code ist der von Bastla, der ja auch schon die Variablen setzt, nur habe ich die Namensgebung etwas verändert, dass keine Variablennamen rein numerisch sind.
Mathe172
wenn ich dich richtig verstanden habe, sollte das gehen:
@REM mathe172 nachempfunden ;-)
@echo off & setlocal enabledelayedexpansion
for /f "usebackq skip=29 delims=" %%A in ("Input.txt") do (
set "First="
set "Last=nicht gefunden"
for %%B in (%%A) do (
if not defined First set "First=%%B"
set "Last=%%B"
)
echo ID!First!=!Last!
set "ID!First!=!Last!"
)
echo %ID1%
REM usw....
Der Code ist der von Bastla, der ja auch schon die Variablen setzt, nur habe ich die Namensgebung etwas verändert, dass keine Variablennamen rein numerisch sind.
Mathe172
Hallo DominikG!
Wenn das jetzt die ganze Wahrheit sein sollte, dann:
Grüße
bastla
Wenn das jetzt die ganze Wahrheit sein sollte, dann:
@echo off & setlocal enabledelayedexpansion
set "Values=Raw_Read_Error_Rate Reallocated_Sector_Ct Spin_Retry_Count Reallocated_Event_Count Current_Pending_Sector Offline_Uncorrectable"
for /f "delims=" %%A in ('findstr "%Values%" "Input.txt"') do (
set "First="
set "Last=nicht gefunden"
for %%B in (%%A) do (
if not defined First set "First=%%B"
set "Last=%%B"
)
set "ID!First!=!Last!"
)
set ID
bastla
Hallo DominikG!
oder jedes Vorkommen von zB %rer% durch %ID1% ersetzen - ansonsten sollte das Berechnen so wie vorher funktionieren ...
Grüße
bastla
Wenn ich jetzt meine batch in die Batch, aus der die werte gelsen werden, einfüge kann ich dann mit den werten bzw. den variablen weiter rechnen oder muss da noch mehr gemacht werden damit das läuft?
Du musst natürlich entweder Deine Zuordnungstabelle zum Übertragen der Variablenwerte einbauen, also:set "rsc=%ID5%"
set "re =%ID196%"
...
Grüße
bastla