Alle Windows-Kommandos

Liste der Windows-Kommandozeilentools - Kommandos und -Befehle unter MS Windows

Liste der Windows-eigenen Kommandos

findstr

Übersicht

Befehl
Kurzbeschreibung
Syntax
Beispiele
     Dateiname rekursiv suchen
     Laufwerke in Abhängigkeit einer Gruppe mappen
     Ausgabe eines Befehls in eine Variable holen
     eine Textdatei parsen


Befehlfindstr
KurzbeschreibungSucht 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 suchen

Mit einem
dir /s /b [Startpfad/[Dateifilter]]
lassen sich Dateien rekursiv mit kompletten Pfad auflisten.

So kann man mit
dir /s /b %WINDIR%\*.exe
Alle *.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 mappen

Mit 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 holen

Zunä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 "Arbeitsstationsdom„ne"') 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:
  • Der erste Befehl könnte mehrere DNS-Server zurückgeben (wg. alternativen DNS-Servern als auch bei mehreren Netzwerkkarten) - beachte, dass per Default in der For-Schleife nur der letzte Wert zurückgeliefert wird. Mehr zu dieser Eigenheit erfährst du nach Eingabe "for /?" in der Kommandozeile.
  • Das Auffinden der Workgroup oder Domäne sucht nach einem deutschen String. Bei einem anderssprachigen Betriebssystem funktioniert dieser Aufruf schon nicht mehr.
  • regedit exportiert immer alle untergeordneten Schlüssel. Unter XP sollte man reg einsetzen:
    reg QUERY HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion /v ProductId

    Dies ist wesentlich schneller und einfacher zuschreiben (aber eben nicht kompatibel zu älteren Win-Versionen). Dieser Aufruf ermittelt den Ordner der History des IE (alles ist in eine Zeile zu schreiben):
    set regfolder="HKEY_CURRENT_USER&Software\Microsoft\Windows\CurrentVersion [BR]
      \Explorer\Shell Folders"
    For /F "tokens=3* delims=[tab_druecken]" %%i in [BR]
      ('reg QUERY %regfolder% /v "History" ^| findstr /i "History"')
    Do set HistoryDir=%%i

s.a. » echo » find » for » ipconfig » net config » reg » regedit » set » type

eine Textdatei parsen

Oft 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:
  • Kommentare sind Zeilen, die mit # beginnen
  • Trennzeichen in meiner Konfiguration ist das Pipe-Symbol: |

... 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


Übersicht