Wie überprüfe ich, was eine TXT-Datei enthält, und wenn eine feste Anzahl der letzten Zeichen mit einer Variablen übereinstimmt, dann die entsprechenden löschen?

860
Tom

Ich habe ein Batch-Skript, das überprüfen muss, was eine Textdatei ( .logoder .txt) enthält.

Wenn die Überprüfung abgeschlossen ist, müssen die Zeilen gelöscht werden, die dieselbe Konfiguration von Zeichen enthalten, die in einer anderen Variablen definiert sind.

Wenn also var1=abcjede Zeile, die als letzte Zeile "abc" hat (in diesem Fall drei Zeichen), aus der Textdatei gelöscht wird.

Wie kann ich das machen?

0

1 Antwort auf die Frage

0
Martin L. Brink

Tom,

Ich würde versuchen, findstr.exe mit der Option / v zu versuchen:

findstr /v "text_to_drop" file.txt 

Wenn Sie Powershell verwenden, versuchen Sie Folgendes:

PS C:\> Select-String -Path "process.txt" -Pattern "text_to_drop" -NotMatch 

Siehe https://docs.microsoft.com/de-de/previous-versions/windows/it-pro/windows-xp/bb490907(v=technet.10) und https://docs.microsoft.com/en- us / powershell / module / microsoft.powershell.utility / select-string? view = powershell-6

Sie müssen reguläre Ausdrücke verwenden, um einen String am Zeilenende abzugleichen, z. B. `findstr / v / r / c:"% var1% $ "file.log`. Die Ausgabe muss in einer anderen Datei gespeichert werden, die dann verschoben wird, um die ursprüngliche `file.log` zu überschreiben. AFH vor 5 Jahren 1
@AFH - oder verwenden Sie die Option `/ E`:` findstr / v / b / c: "% var1%" file.log`. In jedem Fall werden nur Zeilen abgeglichen, die mit `\ r \ n` enden. Wenn in der letzten Zeile das Zeilenendezeichen fehlt oder Unix-Style-Zeilen verwendet werden, funktioniert dies nicht. dbenham vor 5 Jahren 1
@dbenham - Ja, ich habe `/ e` vergessen, was einfacher ist als reguläre Ausdrücke; es wird auch nicht durch RE-reservierte Zeichen in der Übereinstimmungszeichenfolge beeinflusst. AFH vor 5 Jahren 0