
115129
27.05.2014, aktualisiert am 28.05.2014
BATCH - Wort in Zeile suchen, wenn gefunden in txt-Datei schreiben. (ggfls. mit Umformatierung)
Hallo,
ich habe ein erneutes Anliegen und weis nicht recht wie ich das bewerkstelligen soll.
Es existiert eine "Beispiel.log" Datei in der mir ein Batch-Script nach den Worten "SOLL" und "IST" zeilenweise suchen soll.
Wurde einer der beiden Namen gefunden, soll die komplette Zeile in die Datei "Ausgabe.text" verschoben werden.
Die Zeilen enthalten Sonderzeichen wie: "@*
Wäre eine Umstrukturierung der Zeile während des Schreibens in die "Ausgabe.text" möglich?
Beispielsauszug einer (zweier) Zeile innerhalb der Beispiel.log:
05-26-2014 00:15:41 IST: "A1" "B2" "C3" "D4" "*@12f*543-.d6"
05-27-2014 19:07:48 SOLL: "E5" "F6" "G7" "H8" "*@f465*1f"
Umstrukturierung nach Ausgabe.text:
2014.05.26 00:15:41 | IST | A: B2 | B: C3 | C: D4 | D: *@12f*543-.d6
2014.05.27 19:07:48 | SOLL | A: F6 | B: G7 | C: H8 | D: *@f465*1f
Wenn's zu kompliziert oder nicht händelbar ist, wäre ich mit dem verschieben schon mal bestens bedient
Vielen Dank im voraus.
Grüße,
Blattlaus
ich habe ein erneutes Anliegen und weis nicht recht wie ich das bewerkstelligen soll.
Es existiert eine "Beispiel.log" Datei in der mir ein Batch-Script nach den Worten "SOLL" und "IST" zeilenweise suchen soll.
Wurde einer der beiden Namen gefunden, soll die komplette Zeile in die Datei "Ausgabe.text" verschoben werden.
Die Zeilen enthalten Sonderzeichen wie: "@*
Wäre eine Umstrukturierung der Zeile während des Schreibens in die "Ausgabe.text" möglich?
Beispielsauszug einer (zweier) Zeile innerhalb der Beispiel.log:
05-26-2014 00:15:41 IST: "A1" "B2" "C3" "D4" "*@12f*543-.d6"
05-27-2014 19:07:48 SOLL: "E5" "F6" "G7" "H8" "*@f465*1f"
Umstrukturierung nach Ausgabe.text:
2014.05.26 00:15:41 | IST | A: B2 | B: C3 | C: D4 | D: *@12f*543-.d6
2014.05.27 19:07:48 | SOLL | A: F6 | B: G7 | C: H8 | D: *@f465*1f
Wenn's zu kompliziert oder nicht händelbar ist, wäre ich mit dem verschieben schon mal bestens bedient
Vielen Dank im voraus.
Grüße,
Blattlaus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 239371
Url: https://administrator.de/forum/batch-wort-in-zeile-suchen-wenn-gefunden-in-txt-datei-schreiben-ggfls-mit-umformatierung-239371.html
Ausgedruckt am: 15.04.2025 um 17:04 Uhr
10 Kommentare
Neuester Kommentar
Hallo BlattlausOG!
Zum Filtern sollte eigentlich eine Zeile der Art
genügen ...
... und was das Umwandeln angeht - im einfachsten Fall (Voraussetzung: Die Datenwerte enthalten keine Leerzeichen und kein "!") etwa so:
Grüße
bastla
[Edit] "
Zum Filtern sollte eigentlich eine Zeile der Art
findstr "SOLL IST" Beispiel.log>Ausgabe.text
... und was das Umwandeln angeht - im einfachsten Fall (Voraussetzung: Die Datenwerte enthalten keine Leerzeichen und kein "!") etwa so:
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
@echo off & setlocal
set "Ein=D:\Beispiel.log"
set "Aus=D:\Ausgabe.text"
del "%Aus%" 2>nul
for /f "tokens=1-9* delims=- " %%a in ('findstr /i "SOLL IST" "%Ein%"') do (
set "SollIst=%%e"
setlocal enabledelayedexpansion
>>"%Aus%" echo %%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: %%~i ^| D: %%~j
endlocal
)
bastla
[Edit] "
findstr
" angepasst, sodass für "IST" und "SOLL" die Groß-/Kleinschreibung ignoriert wird [/Edit]
Hallo BlattlausOG!
Ich habe inzwischen oben einen Entwurf ergänzt ...
Wenn tatsächlich die Zeilen "verschoben" (also aus der "Beispiel.log" nach Verarbeitung gelöscht) werden sollen, sollte sich das durch das Hinzufügen der folgenden Zeilen am Ende des Batches umsetzen lassen:
Grüße
bastla
Ich habe inzwischen oben einen Entwurf ergänzt ...
Wenn tatsächlich die Zeilen "verschoben" (also aus der "Beispiel.log" nach Verarbeitung gelöscht) werden sollen, sollte sich das durch das Hinzufügen der folgenden Zeilen am Ende des Batches umsetzen lassen:
1
2
3
2
3
move "%Ein%" "%temp%\Ein.log"
findstr /V "SOLL IST" "%temp%\Ein.log">"%Ein%"
del "%temp%\Ein.log"
bastla
Hallo BlattlausOG!
Grüße
bastla
...in den Zeilen sind Leerfelder vorhanden...
Die Frage war aber nicht nach den Zeilen (dort sind die Leerzeichen ja als Trennzeichen nötig; es sei denn, die einzelnen Werten würden durch TAB getrennt, was sich aus Deinem Beispiel - auch mangels passender Formatierung - nicht erkennen lässt), sondern nach den Feldern (also etwa, ob es in "*@12f*543-.d6" auch Leerzeichen geben kann) ...tut sich nix, es wird auch keine Ausgabe.text generiert...
Schwer nachvollziehbar - am ehesten noch erklärbar, wenn "IST" und "SOLL" nicht in Großbuchstaben geschrieben wären (ich ergänze oben noch das nötige "/i
"). Damit Du den Ablauf nachvollziehen kannst, ändere "echo off
" auf "echo on
".Grüße
bastla
Hallo BlattlausOG!
Wenn das Leerzeichen immer an dieser Stelle vorhanden ist, sollte folgende angepasste Schleife funktionieren:
Grüße
bastla
In der vorletzten Zeile gibt es ein Leerzeichen ( im Beispiel unten wäre es in D4 und H8).
Du meinst vermutlich Spalte ...Wenn das Leerzeichen immer an dieser Stelle vorhanden ist, sollte folgende angepasste Schleife funktionieren:
1
2
3
4
5
6
7
2
3
4
5
6
7
for /f "tokens=1-10* delims=- " %%a in ('findstr /i "SOLL IST" "%Ein%"') do (
set "SollIst=%%e"
set "TeilC=%%~i %%~j
setlocal enabledelayedexpansion
>>"%Aus%" echo %%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: !TeilC! ^| D: %%~k
endlocal
)
bastla
Hallo BlattlausOG!
Ungetestet:
Grüße
bastla
Ungetestet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off & setlocal
set "Ein=D:\Beispiel.log"
set "Aus=D:\Ausgabe.text"
del "%Aus%" 2>nul
for /f "tokens=1-10* delims=- " %%a in ('findstr /i "SOLL IST" "%Ein%"') do (
set "SollIst=%%e"
set "TeilC=%%~i %%~j
setlocal enabledelayedexpansion
set "String=%%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: !TeilC! ^| D: %%~k"
findstr /c:"!String!" "%Aus%">nul||>>"%Aus%" echo !String!
endlocal
)
move "%Ein%" "%temp%\Ein.log"
findstr /V "SOLL IST" "%temp%\Ein.log">"%Ein%"
del "%temp%\Ein.log"
bastla