Wie gehe ich durch eine Liste der installierten Programme und nehme eine Zeile mit Microsoft-bezogenen Zeichenfolgen heraus?

572
Zachary Johnson

Dies ist unter Windows 7 mit Befehlszeilen- und Stapeldateien.

Ich habe versucht, meine Programmliste zu überprüfen, eine große Menge Junk zu deinstallieren und eine Menge veralteter Programme zu aktualisieren. Ich habe mit dem Befehl wmic mit jedem Programm ein Textdokument Zeile für Zeile abgerufen. Ich möchte jedes Programm aus dieser Liste mit "Microsoft", "Windows" oder "Visual" im Namen entfernen. Ich versuche dies mit dem Befehl findstr und der Option / v zu tun, bei der nur Zeilen ohne Übereinstimmung ausgegeben werden. Beim Ausführen des Programms, das ich geschrieben habe, werden jedoch keine Übereinstimmungen in der Datei gefunden. Es wird also im Grunde nur kopiert. Ich habe auch die wilden Zeichen ausprobiert, falls es die anderen Zeichen um das Wort herum sind, die es durcheinander bringen oder so.

Hier ist ein Beispiel für eine der Zeilen in der Datei, durch die hindurch gesucht wird: (LASTNAME-LAPTOP, Microsoft Office Excel Viewer, 12.0.6612.1000)

Der PATH ist nur eine Darstellung des Pfads zu meinem Flashlaufwerkordner. Im Skript ist dies der tatsächliche Pfad zu einem Ordner mit beiden RTF-Dateien. Es enthielt ein Leerzeichen, also habe ich die Quelle und die Ausgabe in Anführungszeichen gesetzt.

Hier ist mein Programm:

findstr /i /v ".microsoft. .windows. .visual." "E:\PATH\programs.rtf" > "E:\PATH\programs2.rtf" 
3

1 Antwort auf die Frage

2
DavidPostill

Beim Ausführen des Programms, das ich geschrieben habe, werden keine Übereinstimmungen in der Datei gefunden

Ich habe mit dem Befehl wmic mit jedem Programm ein Textdokument Zeile für Zeile abgerufen.

Von wmic :

Alle Ausgabedateien sind Unicode-Text (mit TYPE in ASCII konvertieren )

Dies verwirrt, findstrwas ASCII als Eingabe erwartet, zum Beispiel:

F:\test>findstr /i /v "microsoft windows visual" unicode.txt ■N a m e V e r s i o n  V A I O D a t a R e s t o r e T o o l 1 . 6 . 0 . 1 3 1 4 0 I n k s c a p e 0 . 9 1 0 . 9 1 M S X M L 4 . 0 S P 3 P a r s e r ( K B 2 7 5 8 6 9 4 ) 4 . 3 0 . 2 1 1 7 . 0 

Sie können dies mit der folgenden Reihenfolge von Beispielbefehlen umgehen:

wmic product get name,version > unicode.txt type unicode.txt > programs.txt findstr /i /v "microsoft windows visual" programs.txt > programs2.txt 

Alternative:

wmic product get name,version > programs.txt type programs.txt | findstr /i /v "microsoft windows visual" > programs2.txt 

Anmerkungen:

  • Verwenden Sie Klartextdateien (nicht RTF) als Eingabe für findstr.
  • type wird zum Konvertieren von Unicode in ASCII verwendet.
  • Die .Zeichen werden im findstrBefehl nicht benötigt

Lesen Sie weiter