Jump to content

Zeilen in einer Textdatei per Batch, CL bearbeiten


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Gemeinde,

 

ich habe ein kleines Problem, ich möchte Zeilen einer Textdatei bearbeiten, genauer hinzufügen, entfernen.

 

Das Hinzufügen von Zeilen ein eine Textdatei geschieht mittel Redirector:

echo Hallo World > Dateiname.txt 

legt eine neue Datei an und erzeugt die erste Zeile

echo Hallo World >> Dateiname.txt 

existiert noch keine Datei wird diese angelegt und die erste Zeile geschrieben, sonst wird angehängt

 

Ich habeleider noch keine Möglichkeit entdeckt, direkt einen Eintrag aus einer Textdatei zu entfernen mittels Kommandozeile. M;an könnte versuchen eine for /f-Schleife zu konstruieren, die letztlich die Aufgabe erfüllt, als das Wahre sehe ich es nicht an.

 

Hat jemand eine Idee, einen Tipp?

 

Dank für Aufmerksamkeit und Rat.

 

Edgar

Link zu diesem Kommentar

Ich möchte das Teilziel näher beschreiben: Meldet sich ein User an einen Client an, soll der Rechnername in eine Textdatei geloggt werden, meldet sich der User wieder ab, soll der Eintrag aus der Datei entfernt werden.

 

Möglicherweise bin ich mit der Idee des Ein- und Austragens in und aus einer datei auf dem verkehrten Schiff. Vieleicht sollte ich für jeden Client eine einzelne Datei mit dessen Namen bei der Anmeldung erzeugen, bei der Abmeldung wieder löschen.

 

Mit

dir R201*.txt  >> Spool%time%.txt 

geht das in weitere Textdatei, deren Inhalt, Zeilen von einer for /f-Schleife zur Bedingung ausgewertet werden.

Link zu diesem Kommentar

Hallo Marco,

 

ich bin nicht sicher ob ich das blicke, deshalb beschreibe ich aml genauer.

 

Nehmen wir einen Pool (Klassenraum) mit 30 Clients. Die User melden sich an, pro Client wird ein Eintrag in einer Textdatei erzeugt.

[R214]
R214-PC01
R214-PC02
R214-PC05
......

Nun logt sich der User an PC01 aus, der Eintrag muss dann aus der Datei entfernt werden.

[R214]
R214-PC02
R214-PC05
......

Das müsste idealerweise aber auch schnell gehen.

 

Mich würde aber interessieren, ob es im cmd-Bereich etwas gibt, mit dem man sowas machen kann, einen geeigneten Parser.

Link zu diesem Kommentar

Ja, genau das macht die kleine Batch-Datei von mir.

 

Du kopierst sie und speicherst sie z.B. unter dem Dateinamen KillAccount.bat.

 

Wenn Du sie nun wie folgt aufrufst ...

 

C:\>KillAccount R214-PC03 Accounts.txt

 

... dann passiert folgendes. Innerhalb der Batchdatei wird findstr aufgerufen.

 

R214-PC03 ist der erste übergebene Parameter und ist somit %1.

Accounts.txt ist der zweite Parameter und somit %2 in der Batchdatei.

 

findstr durchsucht jetzt die Datei Accounts.txt und gibt alle Zeilen aus, die dem

Suchparameter %1 nicht entsprechen. Die Ausgabe leite ich in eine temporäre

Datei ziel.txt, in welcher jetzt alle Rechner sind, außer R214-PC03.

 

Jetzt wird Accounts.txt nur gelöscht und ziel.txt in Accounts.txt umbenannt.

 

Wobei ich das loggen von Anmeldungen lieber mittels GPO steuere und nicht

mit einer Batch-Datei.

 

LG

Marco

Link zu diesem Kommentar

@echo off
findstr /V /C:%1 %2 > ziel.txt
del %2
ren ziel.txt %2

Was enthalten die Übergabeparameter %1 und %2 ?

 

Gemäss Synopsis wird mit /C: Zeichenkette geschaltet. /V bestimmt die Übertragung der nicht aufgefundenen Zeichenketten.

 

In %2 steht wohl der Name der Quelldatei, denn del ist ein Dateibehandlangsbefehl, er löscht die Quelldatei. Am Schluss erhält die Zieldatei den Namen der Quelldatei.

 

%1 enthält also den Rechnernamen, %2 den Namen der Pooldatei.

 

Das ist eine gute Idee, mein Lieber; ich danke dir.

 

Gruß

 

Edgar

Link zu diesem Kommentar

Hi Edgar, habe den Thread aus dem Auge verloren, sorry. :(

 

Ja, die Ereignisse würden dann selbstverständlich im EventLog auftauchen, aber

das ist m. E. kein Nachteil, sondern eher ein Vorteil, weil die Logs genau dafür

gedacht sind und es somit die konformste Realisierung eines Login-Loggings

darstellt.

 

Die Auswertung der Eventlogs kann man auch über Kommandozeile sehr einfach

durchführen und sich so für kleine Netze auch selbst eine Monitoring-Lösung

schaffen. Ich mache das mit wmic, lasse mir HTML-Seiten generieren, speichere

diese in einen Ordner mit IIS - Zugriff und kann mir so dann mittels Browser

an jedem Rechner im Netz die Logs anschauen.

 

Als Beispiel suche ich jetzt einmal die logischen Laufwerke, mit all ihren Daten

und lasse das Ergebnis in eine HTML-Seite fließen.

 

C:\> wmic logicaldisk list full /format:htable > LogDisk.htm

 

Oder hier schaue ich mal nach Events im Log Sicherheit und lasse mir alle Events

anzeigen, die ab dem 06.02.2006 erstellt wurden. Letzteres in einer verkürzten

Darstellung, was ich mittels des Schalters BRIEF erreiche.

 

C:\> wmic ntevent where "LogFile='Security' and TimeGenerated>'20060206'" list brief /format:htable > Events.htm

 

Oder hier ermittel ich z.B. die Taktfrequenz eines Prozessors anhand einer

festen Pfadvorgabe.

 

C:\> wmic path Win32_Processor where "DeviceID='CPU0'" get CurrentClockSpeed

 

Kannst Dir aber auch ganze Informationen zum OS, Computersystem, oder was

auch immer holen und das gerne auch Remote. Hier folgt jetzt ein Beispiel,

wo ich remote auf meinen DC zugreife und mir die Infos zum OS hole.

 

C:\> wmic /node:VOTAN os list full /format:htable > votanOS.htm

 

Wobei VOTAN hier mein DC ist, welchen ich unter /node spezifiziert habe.

 

wmic ist also schon ein nettes Tool um mal eben fix im Netzwerk was

abzufragen.

 

Was die Überwachungsrichtlinie betrifft so erstelle ich diese mittels der

gpmc.msc. Unter Gruppenrichtlinienobjekte erstelle ich dann ein neues GPO

mit den jeweiligen Anpassungen, im aktuellen Fall also unter:

 

Computerkonfiguration
|
Windows-Einstellungen
	|
	Sicherheitseinstellungen
		|
		Lokale Richtlinien
			|
			Überwachungsrichtlinie

 

... und passe dort den Punkt Anmeldeereignisse an.

 

LG

Marco

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...