Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

BATCH - Wort in Zeile suchen, wenn gefunden in txt-Datei schreiben. (ggfls. mit Umformatierung)

Frage Entwicklung Batch & Shell

Mitglied: BlattlausOG

BlattlausOG (Level 1) - Jetzt verbinden

27.05.2014, aktualisiert 28.05.2014, 1750 Aufrufe, 10 Kommentare

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
Mitglied: bastla
27.05.2014, aktualisiert 28.05.2014
Hallo BlattlausOG!

Zum Filtern sollte eigentlich eine Zeile der Art
findstr "SOLL IST" Beispiel.log>Ausgabe.text
genügen ...

... und was das Umwandeln angeht - im einfachsten Fall (Voraussetzung: Die Datenwerte enthalten keine Leerzeichen und kein "!") etwa so:
01.
@echo off & setlocal 
02.
set "Ein=D:\Beispiel.log" 
03.
set "Aus=D:\Ausgabe.text" 
04.
 
05.
del "%Aus%" 2>nul 
06.
for /f "tokens=1-9* delims=- " %%a in ('findstr /i "SOLL IST" "%Ein%"') do ( 
07.
    set "SollIst=%%e" 
08.
    setlocal enabledelayedexpansion 
09.
    >>"%Aus%" echo %%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: %%~i ^| D: %%~j 
10.
    endlocal 
11.
)
Grüße
bastla

[Edit] "findstr" angepasst, sodass für "IST" und "SOLL" die Groß-/Kleinschreibung ignoriert wird [/Edit]
Bitte warten ..
Mitglied: BlattlausOG
27.05.2014, aktualisiert um 23:08 Uhr
Hallo Bastla,

Zu deinem Einzeiler:
So etwas in der Art hatte ich bereits getestet...bei mir hat das "verschieben" aber nicht funktioniert...

Zu der Formatierung:
Eingelesen werden nur die Zeilen die IST und SOLL beinhalten. Alles was innerhalb "" steht ist variabel und soll ohne "" wieder ausgegeben werden.
Außer in diesem Fall "A1" bzw. "E5", der erste Wert soll nicht ausgegeben werden.


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

Die Angaben A: B: C: D: will ich später selbst einmalig deklarieren. Als Ausgabedefinition.

Grüße
Bitte warten ..
Mitglied: bastla
27.05.2014 um 23:12 Uhr
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:
01.
move "%Ein%" "%temp%\Ein.log" 
02.
findstr /V "SOLL IST" "%temp%\Ein.log">"%Ein%" 
03.
del "%temp%\Ein.log"
Grüße
bastla
Bitte warten ..
Mitglied: BlattlausOG
27.05.2014, aktualisiert um 23:27 Uhr
Zitat von bastla:

Hallo BlattlausOG!

Zum Filtern sollte eigentlich eine Zeile der Art
findstr "SOLL IST" Beispiel.log>Ausgabe.text 
> 
genügen ...

... und was das Umwandeln angeht - im einfachsten Fall (Voraussetzung: Die Datenwerte enthalten keine Leerzeichen und kein
"!") etwa so:
01.
@echo off & setlocal 
02.
> set "Ein=D:\Beispiel.log" 
03.
> set "Aus=D:\Ausgabe.text" 
04.
>  
05.
> del "%Aus%" 2>nul 
06.
> for /f "tokens=1-9* delims=- " %%a in ('findstr "SOLL IST" "%Ein%"') do ( 
07.
>     set "SollIst=%%e" 
08.
>     setlocal enabledelayedexpansion 
09.
>     >>"%Aus%" echo %%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: %%~i ^| D: %%~j 
10.
>     endlocal 
11.
> ) 
12.
> 
Grüße
bastla

...in den Zeilen sind Leerfelder vorhanden...
siehe:
05-26-2014 00:15:41 IST: "A1" "B2" "C3" "D4" "*@12f*543-.d6"

Habs grad getestet...tut sich nix, es wird auch keine Ausgabe.text generiert...
Bitte warten ..
Mitglied: bastla
28.05.2014 um 07:08 Uhr
Hallo BlattlausOG!
...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
Bitte warten ..
Mitglied: BlattlausOG
28.05.2014, aktualisiert um 18:21 Uhr
Hallo Bastla,

ich habe nun dein Code nochmal gestestet.

Die Daten werden gesucht, gefunden, angeordnet und in die neue Datei geschrieben...soweit so gut.

Ein Problem habe ich dennoch, dies war mein Fehler.
In der vorletzten Zeile gibt es ein Leerzeichen ( im Beispiel unten wäre es in D4 und H8).

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

Im Moment bringt er in den letzten 2 Spalten was durcheinander.

Vielen Dank im voraus für ne Anpassung

Gruß,
Blattlaus
Bitte warten ..
Mitglied: bastla
LÖSUNG 28.05.2014, aktualisiert um 20:15 Uhr
Hallo BlattlausOG!
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:
01.
for /f "tokens=1-10* delims=- " %%a in ('findstr /i "SOLL IST" "%Ein%"') do ( 
02.
    set "SollIst=%%e" 
03.
    set "TeilC=%%~i %%~j 
04.
    setlocal enabledelayedexpansion 
05.
    >>"%Aus%" echo %%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: !TeilC! ^| D: %%~k 
06.
    endlocal 
07.
)
Grüße
bastla
Bitte warten ..
Mitglied: BlattlausOG
28.05.2014 um 20:15 Uhr
Vieeeelen Dank Bastla,

klappt nun wunderbar

Gruß,
Blattlaus
Bitte warten ..
Mitglied: BlattlausOG
16.06.2014 um 21:24 Uhr
Hallo,

ich habe doch noch ein kleines Anliegen.

Der Code funktioniert, jedoch schreibt er mir gleiche Zeilen mehrfach, von D:\Beispiel.log nach D:\Ausgabe.text.

Wäre es ein großer Aufwand, ein Vergleich mit einzubinden?

Wird z.B. die Zeile 05-26-2014 00:15:41 IST: "A1" "B2" "C3" "D4" "*@12f*543-.d6" durch D:\Beispiel.log eingelesen, zu 2014.05.26 00:15:41 | IST | A: B2 | B: C3 | C: D4 | D: *@12f*543-.d6 umstrukturiert, soll diese "nur" dann in D:\Ausgabe.text geschrieben werden wenn sie nicht existiert. Wenn doch, überspringen.

Hier mein derzeitiger Code:
01.
@echo off & setlocal 
02.
set "Ein=D:\Beispiel.log" 
03.
set "Aus=D:\Ausgabe.text" 
04.
 
05.
del "%Aus%" 2>nul 
06.
for /f "tokens=1-10* delims=- " %%a in ('findstr /i "SOLL IST" "%Ein%"') do ( 
07.
    set "SollIst=%%e" 
08.
    set "TeilC=%%~i %%~j 
09.
    setlocal enabledelayedexpansion 
10.
    >>"%Aus%" echo %%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: !TeilC! ^| D: %%~k 
11.
    endlocal 
12.
13.
move "%Ein%" "%temp%\Ein.log" 
14.
findstr /V "SOLL IST" "%temp%\Ein.log">"%Ein%" 
15.
del "%temp%\Ein.log"
Vielen Dank schonmal

Gruß,
Blattlaus
Bitte warten ..
Mitglied: bastla
16.06.2014 um 21:41 Uhr
Hallo BlattlausOG!

Ungetestet:
01.
@echo off & setlocal 
02.
set "Ein=D:\Beispiel.log" 
03.
set "Aus=D:\Ausgabe.text" 
04.
 
05.
del "%Aus%" 2>nul 
06.
for /f "tokens=1-10* delims=- " %%a in ('findstr /i "SOLL IST" "%Ein%"') do ( 
07.
    set "SollIst=%%e" 
08.
    set "TeilC=%%~i %%~j 
09.
    setlocal enabledelayedexpansion 
10.
    set "String=%%c.%%a.%%b %%d ^| !SollIst::=! ^| A: %%~g ^| B: %%~h ^| C: !TeilC! ^| D: %%~k" 
11.
    findstr /c:"!String!" "%Aus%">nul||>>"%Aus%" echo !String! 
12.
    endlocal 
13.
14.
move "%Ein%" "%temp%\Ein.log" 
15.
findstr /V "SOLL IST" "%temp%\Ein.log">"%Ein%" 
16.
del "%temp%\Ein.log"
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...