dude0815

Batch: Mit einer For-Schleife in einem Datensatz nach einer variablen Zeichenkette suchen

Guten Morgen zusammen,

ich bin gerade dabei mir ein kleines Batch-Programm zu schreiben, dass mir einen vorgegeben Datensatz nach einer variablen Zeichenkette durchsucht.
Leider bin ich neu in diesem Thema und tue mir noch etwas schwer mit den For-Schleifen und vor allem den verschachtelten, daher hoffe ich auf eure Hilfe.

Es geht um einen Datensatz, der bis zu 500 Einzelsätze enthält die immer wie folgt aufgebaut sind:

Satzaufbau: Zeichen
0 - 3 = einmalige Nummern die den Satz identifiziert (4 Stellen)
4 - 43 = Buchstaben (40 Stellen)
44 - 50 = Nummer (7 Stellen)
51 - 66 = Passwort (dieses ist variable zwischen 6 - 16 Stellen)
Das Satzende Kriterium ist immer "0A" hexadezimal.

1. Aufgabe:
Ich muss aus dem Datensatz den Satz heraussuchen, der mit einer vorher vorgegeben Nummer z.B. 1234 in den ersten 4 Zeichen übereinstimmt.
Der zugehörige Satz wird dann in eine Logdatei.txt geschrieben.

2. Aufgabe:
Wieder das gleiche, nur diesmal wird der übereinstimmende Satz nicht in eine Datei geschrieben, sondern es wird das Passwort (Stelle 51-66) überschrieben.

Danke schon mal im voraus, ich hoffe mir kann jemand dabei helfen.
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 399984

Url: https://administrator.de/forum/batch-mit-einer-for-schleife-in-einem-datensatz-nach-einer-variablen-zeichenkette-suchen-399984.html

Ausgedruckt am: 07.06.2025 um 12:06 Uhr

NetzwerkDude
NetzwerkDude 31.01.2019 um 13:17:13 Uhr
Goto Top
Ein paar Fragen dazu:
1) Käme eine Lösung ist PowerShell auch in Frage?
2) Passwörter im klartext in irgendwelchen Datensätzen ist immer Bad Practice - IMMMER - selbst für eine rein akademische Fragestellung. Sollte man sich gar nicht angewöhnen.
Dude0815
Dude0815 31.01.2019 um 13:47:02 Uhr
Goto Top
zu 1) hab den Rest des Programms in Batch und würde das gerne beibehalten.
zu 2) Ich habe leider keinen Einfluss darauf wie der Datensatz aussieht ich muss ihn nur verarbeiten, aber ja im Grundsatz stimme ich dir zu.
NetzwerkDude
NetzwerkDude 31.01.2019 um 13:51:11 Uhr
Goto Top
Okay, dann passe ich, kann kein Windows Batch
77559
77559 31.01.2019 um 23:43:23 Uhr
Goto Top
Die 1. Aufgabe löst du einfach mit findstr.exe, entweder mit der /B option oder per /R (dem Standard-RegEx-Mode) und dem ^ Anker am Anfang.

findstr "^1234" DateiName.Ext >>Datei.Log  

Die 2.Aufgabe ist schon schwieriger da ein Ändern per Batch ein Neuschreiben der Datei bedeutet.

per Batch das Standard Zeilenende CR/LF = 0xD,0xA zu verhindern und nur LF 0xA zu schreiben,
ist schon deutlich schwieriger und ggfs garnicht notwendig?

Wenn die Datensätze ihre Ordnung nicht behalten müssen:
lesen wie 1.
schreiben wie 1. mit /V option und den geänderten Satz am Ende anhängen, ggs Datei anschließend sortieren.
per Substring in Standardvariable (mit Zero Offset) das Password austauschen.

Siehe Set /? , For /? insbesondere /f option.

Quasi fixed length Record Handling per Batch is IMO tatsächlich anachronistisch.

Gruß
LotPings
Dude0815
Dude0815 01.02.2019 aktualisiert um 07:47:08 Uhr
Goto Top
Super vielen Dank, die erste Aufgabe klappt in meinem Programm. Ich hatte es nur mit "Find" probiert, aber mit das mit dem Anker war genau das was ich gesucht habe!

Zur 2. Aufgabe:
Nein es ist denke ich nicht notwendig, die Ordnung kann auch geändert werden.
Ich versuche mal deine Ideen einzubauen.

Gibt es auch die Möglichkeit den gefunden Satz, wie bei 1., in eine Datei zu schreiben und dann direkt aus dem Datensatz zu löschen?
Dann würde ich diesen verarbeiten und wie beschrieben am Ende wieder einfügen.

Danke schon mal.