waldgnarf
Goto Top

verschiedene Zeilen aus .txt entfernen

Hi, hab Schwierigkeiten bei der ausfilterung von Diensten.
Dienste die bei der Standart Windows-Installation antiviert sind sollen aus der Text Datei gelöscht werden.
Also so das ich in der Datei sehe wenn welche dazugekommen sind.

@echo off & setlocal enableDelayedExpansion

net start>temp.txt

set A="Folgende Windows-Dienste sind gestartet:"  
set B="Designs"  
...

for %%I in (temp.txt) do type ('find /v %A%, %B%') >OUT.txt  
del temp.txt

Gruß waldgnarf

Content-Key: 79793

Url: https://administrator.de/contentid/79793

Printed on: April 18, 2024 at 17:04 o'clock

Member: bastla
bastla Feb 03, 2008 at 16:37:22 (UTC)
Goto Top
Hallo waldgnarf!

Einmal abgesehen davon, dass "type" durch "echo" zu ersetzen wäre und es auch ohne (diese) "for"-Schleife ginge, also etwa
findstr /v /c:%A% temp.txt | findstr /v /c:%B% >out.txt
ist Dein Ziel doch offensichtlich der Vergleich der zu verschiedenen Zeitpunkten laufenden Dienste - daher vielleicht eher so:
@echo off & setlocal
::Zeitpunkt 1
net start>temp.txt
...

...
::Zeitpunkt2
net start|findstr /v /g:temp.txt>diff.txt

Grüße
bastla
Member: waldgnarf
waldgnarf Feb 03, 2008 at 19:21:43 (UTC)
Goto Top
Danke, aber ich wollte den script im Autostart laufen lassen. Ich kenne ja alle Standart Dienste, und wenn welche dazu kommen sind die aktiviert und ich habe noch den Script der mich zusammen mit dem gesuchten informiert wenn ein neuer Dienst aufgetaucht ist.

for /F "tokens=1 delims= " %%L in (temp056.txt) do @echo %%L>>temp057.txt  
for /f %%I in ('dir /b temp057.txt') do findstr . %%I>>"LDU.txt"  
del temp*.txt

set Dfilter=LDU.txt
set Dbytes=0
for /R %pfad% %%f in (%Dfilter%) do (
    echo %%f - %%~zfBytes
    set /A Dbytes=bytes+%%~zf
)
if not "%Dbytes%"=="0" goto :WEITER  
del "LDU.txt"  
:WEITER
if exist "LDU.txt" do call "LDU.txt"  

So seh ich immer beim Neustart wenn ein neuer Dienst installiert wurde.
Member: bastla
bastla Feb 03, 2008 at 20:18:21 (UTC)
Goto Top
Hallo waldgnarf!

ich wollte den script im Autostart laufen lassen
Was spräche denn dagegen? Alle zusätzlich zu den in "temp.txt" aufscheinenden "Standard-Diensten" ausgeführten Services kannst Du mit der Zeile "net start|findstr /v /g:temp.txt>diff.txt" heraussuchen und in eine Datei schreiben lassen.

Die zum Vergleich erforderliche "temp.txt" musst Du nur einmal erstellen (und ggf editieren) - der "Zeitpunkt1" in meinem Beispiel wäre also zB unmittelbar, nachdem Du einen Rechner vollständig installliert hast. Du musst nur dafür sorgen, das "temp.txt" alle Zeilen einer "net start"-Ausgabe enthält, die Du nicht sehen willst.
Übrigens: Was der von Dir gepostete (stellenweise etwas abenteuerlich wirkende) Batch mit dem Thema zu tun hat, kann ich beim besten Willen nicht erkennen ...

Grüße
bastla
Member: waldgnarf
waldgnarf Feb 03, 2008 at 23:28:17 (UTC)
Goto Top
Ich hab so viele Datein und verliere schon bei der Funktion den überblick. Darum wollte ich alles in einer schreiben.
Das geht bei dieser version immer so weiter mit den tempdatein weil es ja viel Zeilen zum rausfiltern sind.
type temp00.txt|find /v "Folgende Windows-Dienste sind gestartet:" >temp01.txt  
Die letze Datei wird zwar umbenannt aber und die andern gelöscht aber wenn eine temp024 z.b. fehlt klappt es schon nichtmer.
Deshalb wollte ich das per set =..... machen und im nachhinein die Variablen verarbeiten.
Die Datei befindet sich auch in anderen Ordnern denn sie hat noch andere Funktionen und muss zum abgleichen wenn ich was ändere (was oft passiert) auch oft umkopiert werden.
Wenn ich noch ne temp erstelle hab ich fast mehr arbeit als mir die Sache einbringt.
Die Datei überprüft am Ende ob eine LDU existiert es existieren auch andere ähnliche txt Datein, und wenn sie nicht gelöscht wurden wird die Batch umbenannt und zum korrigieren geöffnet.

Gruß waldgnarf
Member: bastla
bastla Feb 03, 2008 at 23:43:11 (UTC)
Goto Top
Hallo waldgnarf!

Der Sinn des Schalters "/g:" bei "findstr" ist, dass Du die von Dir skizzierte Folge einzelner Filtervorgänge zusammenfassen kannst, indem Du eben in der nach "/g:" angegebenen Datei alle Kriterien zeilenweise anführst.

Sogar, wenn Du diese Datei nicht "mitschleppen" willst, sondern sie aus dem Batch heraus mit einer Folge von "echo"-Befehlen erzeugst, ist mE die dann nur einmalig erforderliche Verwendung von "findstr" und die Ausgabe in nur eine Ergebnisdatei vor allem weniger fehleranfällig ...

Grüße
bastla
Member: waldgnarf
waldgnarf Feb 04, 2008 at 08:13:18 (UTC)
Goto Top
Das hier ist echt ein tolles Forum mit super Hilfen
Vielen Dank nochmal =)

Gruß waldgnarf
Member: waldgnarf
waldgnarf Feb 04, 2008 at 10:00:13 (UTC)
Goto Top
Moin,

ok werd ich machen

Gruß waldgnarf
Member: Biber
Biber Feb 04, 2008 at 10:27:11 (UTC)
Goto Top
Moin waldgnarf,

Du musst das Ampersand ("&") maskieren, weil dieses Zeichen im Batch ein Steuerzeichen mit spezieller Bedeutung ist.

Die Maskierung erfolgt mit Caret ("^") - so würde es gehen (Demo am CMD-Prompt}:
>echo Plaque ^& Pray
Plaque & Pray

Grüße
Biber