findstr to windowsowy odpowiednik uniksowego grep — przeszukuje pliki linijka po linijce i wypluwa te, które pasują do podanego ciągu albo wyrażenia regularnego. Działa w wierszu poleceń (cmd) i jest na każdym Windowsie out of the box, więc nie musisz nic instalować. Świetnie nadaje się do grzebania w logach, szukania ustawienia w plikach konfiguracyjnych albo filtrowania wyjścia innej komendy przez potok.
Składnia i najważniejsze opcje
Podstawowa forma to findstr [opcje] "wzorzec" [pliki]. Uwaga: wszystkie flagi muszą stać przed wzorcem i nazwami plików.
/i— ignoruje wielkość liter (case-insensitive)./s— przeszukuje bieżący katalog i wszystkie podkatalogi./r— traktuje wzorzec jako wyrażenie regularne (a/lwymusza zwykły tekst)./c:"tekst"— szuka dosłownie całego ciągu, łącznie ze spacjami, zamiast traktować spacje jako separator słów./v— wypisuje tylko linie, które nie pasują do wzorca./n— dokleja numer linii do każdego trafienia./m— pokazuje tylko nazwę pliku, w którym jest dopasowanie (bez treści)./bi/e— dopasowanie tylko na początku (/b) albo na końcu (/e) linii.
Przykłady użycia
findstr "error" app.log— wypisuje wszystkie linie z app.log zawierające słowo error.findstr /i /s "TODO" *.cs— szuka TODO bez względu na wielkość liter we wszystkich plikach .cs w katalogu i podkatalogach.findstr /n /c:"connection timeout" server.log— znajduje dokładną frazę ze spacją i pokazuje numery linii.ipconfig | findstr /i "ipv4"— filtruje wyjście innej komendy przez potok, zostawiając tylko linie z adresem IPv4.findstr /r "^[0-9][0-9]*$" liczby.txt— używa regexa, by wyłapać linie złożone wyłącznie z cyfr.
Częste błędy i pułapki
Najczęstsza wpadka: spacja we wzorcu. findstr "plik nie znaleziono" szuka linii zawierających plik LUB nie LUB znaleziono, bo spacja to separator słów. Chcesz całej frazy? Użyj /c:"plik nie znaleziono".
Druga pułapka to regex: silnik findstr jest okrojony i nie zna nowoczesnej składni. Nie ma \d, + ani {n} — masz tylko klasy [...], *, ., ^ i $. Próba użycia rozszerzonego regexa cicho nie zadziała tak, jak myślisz.
Po trzecie: findstr krztusi się plikami w Unicode (UTF-16) — potrafi zwracać puste wyniki tam, gdzie dopasowanie ewidentnie jest. W takim przypadku lepiej sięgnąć po PowerShell. I pamiętaj, że ścieżki ze spacjami zawijaj w cudzysłów.
Komendy pokrewne: find (prostszy, bez regexa), where (lokalizowanie plików), a w PowerShell Select-String oraz uniksowy grep.