Content mit Schleife auslesen
Moin zusammen,
vielleicht kann mir ja jemand weiter helfen da ich ein wenig am verzweifeln bin.
Ich möchte die Datei QUELLE einlesen und dann die Zeilen 81,40,68 in eine Variable schreiben.
Dort kommt aber kein Wert an und trotz aller Suche finde ich den Fehler nicht.
set "quelle=%HOMEDRIVE%%HOMEPATH%\QUELLE"
set "content="
REM Den gesamten Inhalt der Datei "QUELLE" in die Variable "content" einlesen
for /f "usebackq delims=" %%i in ("%quelle%") do (
set "content=!content!%%i"
)
REM Daten aus "content" verarbeiten
for %%a in (81 40 68) do (
for /F "tokens=1,* delims=:" %%b in ("%%a") do (
set "line=!content:~%%b,%%c!"
if "%%b"=="81" (
set "mnum=!line:~5,3!"
) else if "%%b"=="40" (
set "Bewertung=!line:~1,100!"
) else if "%%b"=="68" (
set "PDM=!line!"
)
)
)
vielleicht kann mir ja jemand weiter helfen da ich ein wenig am verzweifeln bin.
Ich möchte die Datei QUELLE einlesen und dann die Zeilen 81,40,68 in eine Variable schreiben.
Dort kommt aber kein Wert an und trotz aller Suche finde ich den Fehler nicht.
set "quelle=%HOMEDRIVE%%HOMEPATH%\QUELLE"
set "content="
REM Den gesamten Inhalt der Datei "QUELLE" in die Variable "content" einlesen
for /f "usebackq delims=" %%i in ("%quelle%") do (
set "content=!content!%%i"
)
REM Daten aus "content" verarbeiten
for %%a in (81 40 68) do (
for /F "tokens=1,* delims=:" %%b in ("%%a") do (
set "line=!content:~%%b,%%c!"
if "%%b"=="81" (
set "mnum=!line:~5,3!"
) else if "%%b"=="40" (
set "Bewertung=!line:~1,100!"
) else if "%%b"=="68" (
set "PDM=!line!"
)
)
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 8085279880
Url: https://administrator.de/forum/content-mit-schleife-auslesen-8085279880.html
Ausgedruckt am: 06.01.2025 um 21:01 Uhr
15 Kommentare
Neuester Kommentar
Hallo,
nutze doch bitte die code Tags, damit dein Quellcode schöner und lesbarer dargestellt wird.
Formatierungen in den Beiträgen
Zu deiner Frage, hier ein Beispiel mit Powershell (von Chatgpt kopiert, weil ich selbst eine Flasche bin was scripting angeht):
Und hier eine Alternative in Batch/Shell:
Gruß
P.S: @7907292512 oder @colinardo werden uns gleich einen Einzeiler um die Ohren hauen der das Gleiche kann
nutze doch bitte die code Tags, damit dein Quellcode schöner und lesbarer dargestellt wird.
Formatierungen in den Beiträgen
Zu deiner Frage, hier ein Beispiel mit Powershell (von Chatgpt kopiert, weil ich selbst eine Flasche bin was scripting angeht):
$sourceFilePath = "C:\path\to\your\file\Quelle.txt"
$lineNumbersToExtract = @(40, 68, 80)
# Initialize variables to store the extracted lines
$line40 = $null
$line68 = $null
$line80 = $null
# Check if the source file exists
if (Test-Path $sourceFilePath -PathType Leaf) {
# Read the content of the file
$fileContent = Get-Content -Path $sourceFilePath -Raw
$fileLines = $fileContent -split "`r`n" # Split content into lines
# Iterate through the specified line numbers and extract the lines
foreach ($lineNumber in $lineNumbersToExtract) {
if ($lineNumber -gt 0 -and $lineNumber -le $fileLines.Length) {
$line = $fileLines[$lineNumber - 1]
# Assign the line content to the appropriate variable
if ($lineNumber -eq 40) {
$line40 = $line
} elseif ($lineNumber -eq 68) {
$line68 = $line
} elseif ($lineNumber -eq 80) {
$line80 = $line
}
} else {
Write-Host "Line $lineNumber does not exist in the file."
}
}
} else {
Write-Host "Source file not found."
}
# Output the extracted lines (optional)
$line40
$line68
$line80
Und hier eine Alternative in Batch/Shell:
@echo off
setlocal
set "sourceFilePath=C:\path\to\your\file\Quelle.txt"
set "lineNumbersToExtract=40 68 80"
for %%n in (%lineNumbersToExtract%) do (
for /f "usebackq tokens=* skip=%%n delims=" %%l in ("%sourceFilePath%") do (
set "line=%%l"
goto :found
)
echo Line %%n does not exist in the file.
set "line="
:found
if %%n == 40 set "line40=!line!"
if %%n == 68 set "line68=!line!"
if %%n == 80 set "line80=!line!"
)
echo Extracted lines:
echo Line 40: %line40%
echo Line 68: %line68%
echo Line 80: %line80%
endlocal
Gruß
P.S: @7907292512 oder @colinardo werden uns gleich einen Einzeiler um die Ohren hauen der das Gleiche kann
Ich möchte die Datei QUELLE einlesen und dann die Zeilen 81,40,68 in eine Variable schreiben.
Pillepalle in Powershell$var1,$var2,$var3 = (Get-Content test.txt)[39,67,80]
Batch ruhe in frieden. Leichenfledderei kommt nicht gut ...
Zitat von @Tulskie:
kann ich von Batch den Pfad mit übergeben und das Ergebnis wieder zurück in Batch bringen?
kann ich von Batch den Pfad mit übergeben und das Ergebnis wieder zurück in Batch bringen?
Kann man selbstredend, aber wieso sollte man so einen Schwachfug machen? Entweder gleich Powershell in Gänze oder Batch, beides zusammen ist hier überflüssiger overhead.
Naja Batch wird wohl nicht sonderlich begeistert sein wenn wir seine Totenruhe stören ... aber ### drauf, die Batchies werden's wohl nie von ihrer Umgebung weg schaffen .
@echo off
set "quelle=D:\datei.txt"
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%quelle%"') do (
if %%a==40 set "var1=%%b"
if %%a==68 set "var2=%%b"
if %%a==81 set "var3=%%b"
)
echo %var1%
echo %var2%
echo %var3%
und tschüss ....
Wie baue ich den Aufruf um wenn ich nach einer Zeichenkette suchen möchte?
Inhalt ist immer in %%b kannst du z.B. in der Schleife an findstr pipen und darin suchen.@echo off
set "quelle=D:\datei.txt"
for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%quelle%"') do (
echo.%%b|findstr /ilc:"Whatever" >nul 2>&1 && set "var1=%%b"
)
echo %var1%
Brauchst du ja nicht wenn du nach Text suchst.
Tja und mit Powershell und Import-Csv wärst du mit sowas in null komma nix mit nem Einzeiler fertig. Da siehst du mal wieder die kruden Nachteile die Batch hat X-Zeilen Code für einfachste Aufgaben.
Dazu kommt das ich nur mit dem 3ten token vergleichen darf.
Einfach in die Schleife eine weitere For-Schleife setzen die die Zeile in Ihre Tokens zerlegt, welche das bei dir sind weiß hier ja keiner, so no input no output. Ich weiß nicht wie sich die Leute das hier immer vorstellen wir hätten Glaskugel 3.0 die alles sieht "koppschüttel".Tja und mit Powershell und Import-Csv wärst du mit sowas in null komma nix mit nem Einzeiler fertig. Da siehst du mal wieder die kruden Nachteile die Batch hat X-Zeilen Code für einfachste Aufgaben.
Datei-Inhalt
Code
Ergebnis
Tutorial zur FOR-Schleife
Mit Powershell wieder ein Einzeiler
Zum Auswählen von bestimmten
Ich bin jetzt raus, schon zu viel Leichen für umme gefleddert... 🖖
PART_LASER_LENGTH = 0
PART_PIERCING_PNT = 0
PART_PATH_CORR = 0
PART_ROT_INCREMENT = 4
@echo off
set "quelle=D:\datei.txt"
for /f "usebackq tokens=1,2 delims== " %%a in ("%quelle%") do (
if "%%a" == "PART_ROT_INCREMENT" set "var1=%%b"
)
echo %var1%
4
Tutorial zur FOR-Schleife
Mit Powershell wieder ein Einzeiler
Get-Content D:\test.txt -Raw | ConvertFrom-StringData
Name Value
---- -----
PART_ROT_INCREMENT 4
PART_PATH_CORR 0
PART_PIERCING_PNT 0
PART_LASER_LENGTH 0
Get-Content D:\test.txt -Raw | ConvertFrom-StringData | ? Name -eq 'PART_ROT_INCREMENT' | select -Expand Value
Ich bin jetzt raus, schon zu viel Leichen für umme gefleddert... 🖖