Top-Themen

Aktuelle Themen (A bis Z)

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, 1809 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 ..
Ähnliche Inhalte
Batch & Shell
Per Batch in ausgewählte oder vorgeschriebene Zeile einer .txt schreiben
gelöst Frage von pdiddoBatch & Shell6 Kommentare

Morgen Leute, vor lauter Bäumen sehe ich den Wald nicht mehr. Ich möchte, dass meine 1.bat in die erste ...

Batch & Shell
Mit Batch einen Ordne mit .txt Dateien nach einem Wort durchsuchen
gelöst Frage von noah1400Batch & Shell8 Kommentare

Hallo Ich möchte eine Art login mit Batch programieren. Als erstes gibt es eine Eingabe dort gibt man seinen ...

Batch & Shell
Mit Batch Zeilen aus TXT modifizieren
gelöst Frage von chef1568Batch & Shell4 Kommentare

Hallo zusammen, leider konnte ich mit den bisherigen Threads mein Problem bisher nicht lösen. Problemstellung: In einer Textdatei sind ...

Batch & Shell
Größe einer Datei per BATCH in eine TXT schreiben
gelöst Frage von marvinplBatch & Shell5 Kommentare

Hallo erstmal und danke, dass du meine Frage geöffnet hast. Ich möchte auf Servern von uns und unseren Kunden ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 104 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell13 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...