forgottenrealm
Goto Top

Text finden und gefiltert speichern

Hi


Trotz reichlicher Suche finde ich keinen passenden Beitrag, darum frag ich mal direkt an.


Gegeben ist eine Textdatei mit der Ausgabe von net view > ...

Der Inhalt sieht also wie folgt aus;

Servername Beschreibung

\\PC1
\\PCMUH
\\KISTE
Der Befehl wurde erfolgreich ausgefhrt.


Jetzt möchte ich, dass die Computernamen (ohne die \\ davor) untereinander in eine weitere Textdatei ausgegeben werden.

Soll also so aussehen;

PC1
PCMUH
KISTE


Bisher habe ich es mit dieser Datei versucht;

set TEXTOK=Der Befehl wurde erfolgreich
set NETVIEWFILE=netview.txt
set COMPUTERS=\\*
set FINISHFILE=Computer.txt

net view > %NETVIEWFILE%

find "%TEXTOK%" "%NETVIEWFILE%" && (
for /f %%L IN (%NETVIEWFILE%) DO findstr "%COMPUTERS%" "%NETVIEWFILE%" > %FINISHFILE%
)

Ausgegeben wird dadurch der gesamte Inhalt der netview.txt, was ja nicht Sinn der Sache ist.

Diese Datei funktioniert dadurch logischerweise so nicht und ich komme aufgrund meines begrenzten Wissens bezüglich der for schleifen in Verbindung mit tokens ect. einfach nicht weiter.

Content-Key: 133061

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

Printed on: April 23, 2024 at 20:04 o'clock

Member: bastla
bastla Jan 10, 2010 at 10:06:44 (UTC)
Goto Top
Hallo ForgottenRealm!

Wenn Du keinen besonderen Bedarf an der Datei "netview.txt" hast, genügt eigentlich:
@echo off & setlocal
set FINISHFILE=Computer.txt
del "%FINISHFILE%" 2>nul  
for /f "delims=\" %%i in ('net view^|findstr "\\\\"') do >>"%FINISHFILE%" echo %%i  
Grüße
bastla
Member: ForgottenRealm
ForgottenRealm Jan 10, 2010 at 10:20:03 (UTC)
Goto Top
Hi bastla

Funktioniert einwandfrei, vielen Dank!

Ich habe die Zeile noch etwas umgeändert;

for /f "delims=\" %%i in ('net view^|findstr "\\"') do echo %%i>>"%FINISHFILE%"

Geändert habe ich;

Statt \\\\ nur noch \\ - warum hast du vier mal \ gemacht?

Aus ">>"%FINISHFILE%" echo %%i" habe ich "echo %%i>>"%FINISHFILE%"" gemacht. - Warum ist die Echo Ausgabe in deiner Zeile in einer andren Reihenfolge?

So funktioniert diese auch noch. Gibt es trozdem deinen Fehler in meiner Zeile, obwohl diese auch so funktioniert?


Gibt es eine Internetseite, auf welcher Verständlich erklärt wird was;

for /*
delims
tokens

machen ?

Wie es mir scheint, werden Zeichen mit "delims=[zeichen]" im set (*) ignoriert, oder irre ich da?


[edit]

Mir ist noch etwas eingefallen, was ich benötigen könnte.

Wenn ich den Del Befehl aus dem Programm nehme, wird die einmal erstellte Liste bei der nächsten Ausführung erweitert und die Computernamen sind in dieser doppelt enthalten.

Gibt es eine Möglichkeit, die Datei vor dem Hinzufügen von weiteren Computernamen darauf zu prüfen, ob dieser Computername schon vorhanden ist und wenn ja, dass dieser nicht erneut eingetragen wird ?
Member: bastla
bastla Jan 10, 2010 at 12:43:30 (UTC)
Goto Top
Hallo ForgottenRealm!
Statt \\\\ nur noch \\ - warum hast du vier mal \ gemacht?
Ist eigentlich nicht nötig, sondern nur eine exaktere Umsetzung der Suche - Erklärung: Da ich (bevorzugt) "findstr" verwende und dort im Suchbegriff mit "\" eine "Maskierung" erfolgt, bedeutet "\\", dass nach einem einfachen "\" zu suchen wäre (was ja aber auch genügen sollte) - um aber (genauer) nur Zeilen mit "\\" zu finden, muss dann eben jeder "\" verdoppelt werden ...
Aus ">>"%FINISHFILE%" echo %%i" habe ich "echo %%i>>"%FINISHFILE%"" gemacht. - Warum ist die Echo Ausgabe in deiner Zeile in einer andren Reihenfolge?
Einerseits eine Stilfrage, gelegentlich aber vorteilhaft, wenn zB ein
echo Aktueller Wert: 2>Datei.txt
ein anderes als das gewünschte Ergebnis bringt (hier allerdings ziemlich sicher egal, daher dürfte es mit Deiner Version keine Probleme geben).
Wie es mir scheint, werden Zeichen mit "delims=[zeichen]" im set (*) ignoriert, oder irre ich da?
"delims" ist von "delimiters" abgleitet und bedeutet daher "Trennzeichen" - anhand dieser Trennzeichen wird in einer "for /f"-Schleife die Zeile in einzelne "tokens" aufgeteilt - im konkreten Fall angenehmer Nebeneffekt: Das Trennzeichen ist nicht Bestandteil der einzelnen Teile ("tokens") und "verschwindet" daher. Noch ein kurzes Beispiel zur Veranschaulichung (direkt an der Kommandozeile zu verwenden, in einem Batch "%%a", "%%b" und "%%c" anstelle von "%a", "%b" und "%c"):
for /f "tokens=1-3 delims=." %a in ("%date%") do @echo %c %b %a
Gibt es eine Internetseite, auf welcher Verständlich erklärt wird ...
Vermutlich viele face-wink - ich kann Dir nur leider keine Adressen nennen (aber schau mal in die ) , sondern nur auf die Onlinehilfe mit zB "for /?" bzw auf die vielen konkreten Batchbeispiele hier im Forum (in denen fast überall ein "for" vorkommt), verweisen.
Gibt es eine Möglichkeit, die Datei vor dem Hinzufügen von weiteren Computernamen darauf zu prüfen, ob dieser Computername schon vorhanden ist und wenn ja, dass dieser nicht erneut eingetragen wird ?
Etwa so (auf Basis der von Dir bevorzugten Schreibweise):
for /f "delims=\" %%i in ('net view^|findstr "\\"') do findstr /x "%%i" "%FINISHFILE%">nul || echo %%i>>"%FINISHFILE%"
Grüße
bastla
Member: ForgottenRealm
ForgottenRealm Jan 10, 2010 at 13:04:22 (UTC)
Goto Top
Nochmal vielen Dank face-smile

Funktioniert super.