
147773
26.02.2021
Bestimmte Stelle aus Textdatei auslesen
Guten Tag zusammen,
ich begrüße hiermit zu meinem ersten Beitrag hier. Ich habe hier schon oft als Gast mitgelesen, wenn ich ein Problem hatte, aber nun finde ich leider keine Lösung.
Ich schreibe ab und an kleine Routinen per Batch, damit ich selbst weniger Arbeit habe. In meinem Problemfall soll das Script folgendes tun:
Der User (also ich) soll nach dem Ausführen einen Text eingeben (Format ist immer das gleiche, einfach nur copy&paste aus einem anderen Programm).
Dabei werden Informationen aus diesem Text herausgefiltert und in einer .txt Datei ausgegeben. Dies kann der User dann kopieren und weiterverwenden.
Das Format, in dem der Text eingegeben wird, lautet wie folgt:
(FPL-XXXXX[XX]-VG-...
Die zwei X in der Klammer sind optional, ich habe nach AB "..." eingefügt, um das ganze abzukürzen. Das danach ist so ziemlich das selbe.
Ich mit meinem, für Amateure üblichem, "gefährlichem" Halbwissen habe bis jetzt folgendes Script auf die Beine gestellt:
Die Sprungmarke "Callsign" dient mir zur besseren Übersicht (wird ja in Notepadd++ farblich hervorgehoben).
Nun zum Problem:
Leider schließt sich das Script, sobald ich zu Zeile 17 komme (habe ich ganz einfach mir "pause" überprüft).
Ich vermute, dass ich an der Stelle einen Fehler gemacht habe. Ich kenne mich leider wenig mit "for" aus. Ich nehme mir (wie oben schon angedeutet) gerne Script-Schnipsel hier aus dem Forum heraus. Ich verstehe in etwa, was diese tun, aber mir ist nicht ersichtlich, wo das Problem liegt.
Ich würde gerne jede Buchstabenfolge in eine .tmp oder eine .txt bringen (werden am Ende des Scripts wieder gelöscht).
Vielleicht kann mir hier ja Jemand weiterhelfen.
Ich bedanke mich an dieser Stelle schon einmal!
Grüße
EMAKA1710
ich begrüße hiermit zu meinem ersten Beitrag hier. Ich habe hier schon oft als Gast mitgelesen, wenn ich ein Problem hatte, aber nun finde ich leider keine Lösung.
Ich schreibe ab und an kleine Routinen per Batch, damit ich selbst weniger Arbeit habe. In meinem Problemfall soll das Script folgendes tun:
Der User (also ich) soll nach dem Ausführen einen Text eingeben (Format ist immer das gleiche, einfach nur copy&paste aus einem anderen Programm).
Dabei werden Informationen aus diesem Text herausgefiltert und in einer .txt Datei ausgegeben. Dies kann der User dann kopieren und weiterverwenden.
Das Format, in dem der Text eingegeben wird, lautet wie folgt:
(FPL-XXXXX[XX]-VG-...
Die zwei X in der Klammer sind optional, ich habe nach AB "..." eingefügt, um das ganze abzukürzen. Das danach ist so ziemlich das selbe.
Ich mit meinem, für Amateure üblichem, "gefährlichem" Halbwissen habe bis jetzt folgendes Script auf die Beine gestellt:
@echo off & setlocal enableDelayedExpansion
if not exist %temp%\main mkdir %temp%\main
set tmp=%temp%\main
set IFPSin=
set /p IFPSin= %=%
echo %IFPSin%>%tmp%\IFPSinput.tmp
set IFPSinput=%tmp%\IFPSinput.tmp
:Callsign
set FPL=%tmp%\FPL.tmp
type nul>%FPL%
for /f "usebackq delims= %%i in ("%IFPSinput%") do set Callsign=%%i
!Callsign:~6,7!>%FPL%
echo %Callsign%
pause
Die Sprungmarke "Callsign" dient mir zur besseren Übersicht (wird ja in Notepadd++ farblich hervorgehoben).
Nun zum Problem:
Leider schließt sich das Script, sobald ich zu Zeile 17 komme (habe ich ganz einfach mir "pause" überprüft).
Ich vermute, dass ich an der Stelle einen Fehler gemacht habe. Ich kenne mich leider wenig mit "for" aus. Ich nehme mir (wie oben schon angedeutet) gerne Script-Schnipsel hier aus dem Forum heraus. Ich verstehe in etwa, was diese tun, aber mir ist nicht ersichtlich, wo das Problem liegt.
Ich würde gerne jede Buchstabenfolge in eine .tmp oder eine .txt bringen (werden am Ende des Scripts wieder gelöscht).
Vielleicht kann mir hier ja Jemand weiterhelfen.
Ich bedanke mich an dieser Stelle schon einmal!
Grüße
EMAKA1710
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 656564
Url: https://administrator.de/forum/bestimmte-stelle-aus-textdatei-auslesen-656564.html
Ausgedruckt am: 30.04.2025 um 05:04 Uhr
4 Kommentare
Neuester Kommentar

Dafür würde ich ehrlich gesagt heutzutage kein Batch mehr nehmen sondern direkt auf die Powershell ausweichen, die hat dafür wesentlich bessere Mittel schon weil Batches mit Sonderzeichen/Encodings nicht sonderlich flexibel sind.
Das ganze kannst du auch in ner Batch nutzen wenn du das noch unbedingt willst
Gruß SK
$txt = read-host "Bitte Text eingeben"
$ergebnis = [regex]::match($txt,'(?is)FPL-(.{1,7})-VG-').Groups[1].Value
$ergebnis
@echo off
set /p Eingabe=Bitte Text eingeben:
for /f "delims=" %%a in ('powershell -EP Bypass -C "[regex]::match('%Eingabe%','(?is)FPL-(.{1,7})-VG-').Groups[1].Value"') do set "ergebnis=%%a"
echo %ergebnis%
Das Format, in dem der Text eingegeben wird, lautet wie folgt:
(FPL-XXXXX[XX]-VG-...
Gut aber was davon brauchst du genau? Das wird leider nicht ganz klar in deinem langen Post. Habe in den Codes oben diesen ganzen Ausdruck in eine Regular Expression gepresst, für die Xe von der Anzahl her minimal 5-7 stück beliebige Zeichen.(FPL-XXXXX[XX]-VG-...
Gruß SK

Ich brauche davon das, was ich oben als "X" gekennzeichnet habe. Die Xe werden dann verschiedene Buchstaben oder Zahlen sein. Dabei liegt die Anzahl der Xe (Wie ich vorhin falsch erklärt habe) zwischen 1 und 7.
Hab's dir oben angepasst.
aber da waren mir dann die Befehle manchmal zu umständlich.
Normalerweise ist's ja eigentlich umgekehrt, die PS ist da wesentlich einheitlicher strukturiert, mit den CMDLets ja übergreifend klar und verständlich.Vermutlich bist Du nicht am Ball geblieben denn nur wenn man mal durchsteigt lernt man sie zu schätzen. Batch willst du dann eigentlich nicht mehr sehen, vor allem schreibt man sich damit ja meist einen Wolf für so simple Dinge.