
64903
19.05.2008, aktualisiert um 16:15:13 Uhr
Batch - Textdatei auslesen - Datensätze weglassen
Hallo Leute,
ich habe eine Textdatei erzeugt, die alle "Geplanten Tasks" mit folgenden Infos enthält:
HostName: Server1
TaskName: BP_ALL_RESTART
Last Run Time: 04:30:00, 10.04.2008
Last Result: 0
Task To Run: D:\restart_all.bat
Scheduled Task State: Enabled
Nun möchte ich gerne alle "Datensätze" rausfiltern, wo:
1) "Last Result" ungleich 0
2) "Scheduled Task State" gleich Enabled
Das Ergebnis kommt in eine neue Textdatei.
Keine Ahnung, ob das überhaupt mit einer Batchdatei möglich ist, aber vielleicht hat ja
jemand eine Idee.
Gruss
Oliver
ich habe eine Textdatei erzeugt, die alle "Geplanten Tasks" mit folgenden Infos enthält:
HostName: Server1
TaskName: BP_ALL_RESTART
Last Run Time: 04:30:00, 10.04.2008
Last Result: 0
Task To Run: D:\restart_all.bat
Scheduled Task State: Enabled
Nun möchte ich gerne alle "Datensätze" rausfiltern, wo:
1) "Last Result" ungleich 0
2) "Scheduled Task State" gleich Enabled
Das Ergebnis kommt in eine neue Textdatei.
Keine Ahnung, ob das überhaupt mit einer Batchdatei möglich ist, aber vielleicht hat ja
jemand eine Idee.
Gruss
Oliver
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 87933
Url: https://administrator.de/forum/batch-textdatei-auslesen-datensaetze-weglassen-87933.html
Ausgedruckt am: 07.05.2025 um 06:05 Uhr
4 Kommentare
Neuester Kommentar

Servus,
am einfachsten ist es - wenn alle Infos zu einem Task in einer Zeile stehen (per komma getrennt wäre ideal)
Dann reicht ein einfaches
am einfachsten ist es - wenn alle Infos zu einem Task in einer Zeile stehen (per komma getrennt wäre ideal)
Dann reicht ein einfaches
findstr Wert Dateiname
Hallo Olli1234 und TimoBeil!
Einen "echten" Datensatz daraus zu machen, war auch meine erste Idee. Unter der Annahme, dass jeder Satz mit "HostName:" beginnt (festgelegt in %Header%), könnte der Batch so aussehen:
Für die Ausgabe gibt es zwei Varianten: entweder die gleiche Aufteilung wie in der Ausgangsdatei (Ergebnis: 6 Datenzeilen + von mir eingefügte Leerzeile) oder (derzeit auskommentiert) Ausgabe als Datensatz in einer Zeile, getrennt durch das mit "set Delim=" angegebene Trennzeichen.
Grüße
bastla
Einen "echten" Datensatz daraus zu machen, war auch meine erste Idee. Unter der Annahme, dass jeder Satz mit "HostName:" beginnt (festgelegt in %Header%), könnte der Batch so aussehen:
@echo off & setlocal
set "Liste=D:\Tasks.txt"
set "Erg=D:\Ergebnis.txt"
set "Header=HostName:"
set "Delim=;"
set Check1=/v /c:"Last Result: 0"
set Check2=/c:"Scheduled Task State: Enabled"
if exist "%Erg%" del "%Erg%"
set Datensatz=
for /f "usebackq delims=" %%i in ("%Liste%") do call :ProcessLine "%%i"
echo %Datensatz%|findstr %Check1%|findstr %Check2%>nul && call :Ausgabe "%Datensatz%"
::echo %Datensatz%|findstr %Check1%|findstr %Check2%>nul && >>"%Erg%" echo %Datensatz%
goto :eof
:ProcessLine
echo %~1|findstr /b /c:"%Header%">nul || goto :Feld
echo %Datensatz%|findstr %Check1%|findstr %Check2%>nul && call :Ausgabe "%Datensatz%"
::echo %Datensatz%|findstr %Check1%|findstr %Check2%>nul && >>"%Erg%" echo %Datensatz%
set "Datensatz=%~1"
goto :eof
:Feld
set "Datensatz=%Datensatz%;%~1"
goto :eof
:Ausgabe
for /f "tokens=1-6 delims=%Delim%" %%a in (%1) do (
echo %%a
echo %%b
echo %%c
echo %%d
echo %%e
echo %%f
echo\
)>>"%Erg%"
goto :eof
Grüße
bastla