Liste der Windows-eigenen Kommandos
findstr
BefehlKurzbeschreibung
Syntax
Beispiele
Dateiname rekursiv suchen
Laufwerke in Abhängigkeit einer Gruppe mappen
Ausgabe eines Befehls in eine Variable holen
eine Textdatei parsen
Befehl | findstr |
Kurzbeschreibung | Sucht nach Zeichenfolgen in Dateien. |
Syntax | Hinweis: Diese Datei finden Sie im System32-Ordner. Kommando zum Anzeigen der Hilfe: findstr /? Sucht nach Zeichenfolgen in Dateien. FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:Datei] [/C:Zeichenfolge] [/G:Datei] [/D:Verz.liste] [/A:Farbattribute] [/OFF[LINE]] Zeichenfolgen [[Laufwerk:][Pfad]Dateiname[ ...]] /B Sucht am Zeilenanfang. /E Sucht am Zeilenende. /L Sucht nach dem Text buchstabengetreu. /R Sucht nach der Zeichenfolge als regulärem Ausdruck. /S Sucht nach entsprechenden Dateien im aktuellen Verzeichnis und allen Unterverzeichnissen. /I Ignoriert Groß-/Kleinschreibung. /X Gibt Zeilen aus, die vollkommen übereinstimmen. /V Gibt Zeilen aus, die die Zeichenfolge nicht enthalten. /N Gibt die Zeilennummer vor jeder Trefferzeile an. /M Gibt nur die Namen der Dateien aus, die die Zeichenfolge enthalten. /O Gibt den Offset des Zeichens vor jeder gefundenen Zeile aus. /P Überspringt Dateien mit Zeichen, die nicht gedruckt werden können. /OFF[LINE] Überspringt keine Offlinedateien. /A:Attrib Gibt die Farbattribute als zwei hexadezimale Ziffern an. Siehe "COLOR /?" /F:Datei Liest eine Dateiliste aus der angegebenen Datei ein. /C:Zeichenfolge Sucht nach Zeichenfolge buchstabengetreu. /G:Datei Liest Suchzeichenfolge aus der angegebenen Datei ein. /D:Verzeichnis Durchsucht eine mit Semikolons getrennte Verzeichnisliste. Zeichenfolge Text, nach dem gesucht werden soll. [Laufwerk:][Pfad] Dateiname Angabe der zu durchsuchenden Datei(en). Leerzeichen weisen auf mehrere getrennte Zeichenfolgen hin, außer es wurde /C als Option angegeben. Zum Beispiel sucht 'FINDSTR "Windows NT" BR.TXT' nach "Windows" oder "NT" in der Datei BR.TXT. 'FINDSTR /C:"Windows NT" BR.TXT' hingegen sucht nach "Windows NT" in der Datei BR.TXT. Schnellübersicht regulärer Ausdrücke: . Platzhalter: beliebiges Zeichen * Wiederholung: keine oder mehrere Wiederholungen des/der vorhergehenden Zeichens/Klasse ^ Zeilenposition: Anfang der Zeile $ Zeilenposition: Ende der Zeile [Klasse] Zeichenklasse: beliebiges Zeichen aus einem Zeichensatz [^Klasse] Umgekehrte Klasse: beliebiges Zeichen nicht im Zeichensatz [x-y] Bereich: beliebige Zeichen im angegebenen Bereich \x Escape: direkte Verwendung eines Metazeichens x \<xyz Wortposition: am Anfang des Wortes xyz\> Wortposition: am Ende des Wortes Informationen zu FINDSTR mit regulären Ausdrücken finden Sie im Onlinebefehlsverzeichnis. |
Beispiele | Dateiname rekursiv suchenMit einemdir /s /b [Startpfad/[Dateifilter]]lassen sich Dateien rekursiv mit kompletten Pfad auflisten. So kann man mit dir /s /b %WINDIR%\*.exeAlle *.exe Dateien auflisten. Mit einem nachfolgenden findstr lässt sich diese Ausgabe (auch mit Regex) filtern. So z.B. alle .exe-Dateien, die mit "w" beginnen, "p" aufhören, aber nicht im "Download"-Verzeichnis sind: dir /s /b %WINDIR%\ | findstr "\\w.*p\.exe" | findstr /v "Download" s.a. » dir Laufwerke in Abhängigkeit einer Gruppe mappenMit dem Kommando "net user" lassen sich Benutzerinformationen eines lokalen oder eines Domänen-Kontos (erfordert Parameter /domain) anzeigen. Sucht man in dieser Ausgabe nach einem Gruppennamen (der immer mit einem "*" beginnt), kann man in Abhängigkeit der Benutzergruppe Aktionen ausführen.Als Beispiel nehme ich ein Logon-Skript, das einmal allgemeine und dann je nach Gruppenzugehörigkeit weitere Laufwerke mappt. echo. echo ===== Mapping der Laufwerke echo. echo -- trenne bestehende Laufwerke for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do ( echo.| net use %%a: /del 2>nul >nul ) echo. echo -- verbinde User-Laufwerk net use U: \\SERVER\%username%$ echo. echo -- verbinde allgemeine Laufwerke net use T: \\SERVER\templates$ net use X: \\SERVER\transfer$ echo. net user %username% /domain | findstr /c:"*Office" >nul 2>nul && ( echo --- verbinde Office-Share: net use O: \\SERVER\office$ echo. ) net user %username% /domain | findstr /c:"*IT" >nul 2>nul && ( echo --- verbinde IT-Share: net use I: \\SERVER\it$ echo. ) echo ===== Mapping der Laufwerke beendet. s.a. » net use » net user Ausgabe eines Befehls in eine Variable holenZunächst muss man wissen, in welchem Format die Ausgabe eines Kommandos daherkommt und wie man die gesamte Ausgabe nach der gewünschten Zeile filtern kann.Oft steht die gewünschte Information dann auch nicht allein in der Zeile - dann muss man noch die anderen Informationen ausblenden. Am einfachsten ist dies mit der FOR-Schleife zu bewerkstelligen. Mit den Parametern TOKENS und DELIMS lässt sich die Ausgabe effektiv beschneiden. Das Setzen der Variable erfolgt mit dem normalen SET Befehl. rem -- Beispiel 1 -- For /F "tokens=2 Delims=:" %%i in ('ipconfig /all^|Find /i "DNS"') Do [BR] @Set DNSSERVER=%%i echo DNSSERVER=%DNSSERVER% rem -- Beispiel 2 -- For /F "tokens=3" %%i in ('Net Config Workstation^|Find /i "Arbeitsstationsdomne"') Do [BR] @Set WORKGROUP=%%i echo WORKGROUP=%WORKGROUP% rem -- Beispiel 3 -- set sTMPFILE=%temp%\~test.tmp regedit /e %sTMPFILE% "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion" For /F "tokens=2 Delims==" %%a in ('type %sTMPFILE%^| find "ProductId"') do [BR] @set winSerial=%%a 2>nul del %sTMPFILE% echo Windows-Serial Number=%winSerial% so holt man den Wert aus der Registry in eine Variable - das funktioniert mit Hilfe der reg.exe, die XP beiliegt: Hinweise:
s.a. » echo » find » for » ipconfig » net config » reg » regedit » set » type eine Textdatei parsenOft ist es gut, wenn man Informationen aus einer Textdatei liest, statt in einer Batchdatei diese als Variablen abzulegen oder zigfach dieselbe Kommandofolge zu wiederholen. Anpassungen erfolgen dann in einer Konfigurationsdatei und derjenige, der die Anpassung macht, braucht nicht im Skript herumfuhrwerken.Um eine Textdatei zu parsen, brauchen wir eine Textdatei, aus der wir die Informationen auslesen wollen. Neben den auslesbaren Nutzdaten sollte man Kommentare verwenden können. Zu Demo verwende ich einmal die folgenden Konventionen:
... und so kann es aussehen: # ================================================== # DEMO-Konfiguration # Syntax: # Kuerzel | Anzeigename | zu startendes Programm # ================================================== E|Explorer|explorer.exe W|MS Write|write.exe P|MS Paint|paint.exe # -- ENDE Wenn man ein Menü darsellen möchte, braucht man jeweils das erste und zweite Feld aus fer Konfigurationsdatei. Das Parsen erfolgt mit Hilfe des findstr-Befehls. Die Kommentare kann man mit dem Parameter /v rauswerfen. Dies zeigt alle Zeilen exklusive die mit # am Zeilenanfang: type menu.txt | findstr /v "^#" Desweiteren müssen wir wissen, wie wir die überbleibenden Informationen anhand unseres Trenner-Symbols auseinandernehmen können. Dies geht mit Hilfe des For-Kommandos. Mit dem Parameter /F geben wir an, dass eine Kommandoausgabe geparst werden soll. Mit der Angabe delim wird das Trennzeichen angegeben. Innerhalb der Schleife kann man mit der angegebenen Variable auf den ersten Wert zugreifen; mit dem nächstfolgenden Buchstaben auf den zweiten Wert usw.: echo Programmauswahl: for /F "tokens=1,2 delims=|" %%a in ('type menu.txt ^| findstr /v "^#"') do ( echo Taste %%a ... %%b ) s.a. » echo » for |