where

Lokalizuje i wyświetla ścieżki plików pasujących do wzorca w katalogach PATH.

where to windowsowy odpowiednik uniksowego which — mówi Ci, gdzie w systemie leży plik pasujący do wzorca. Domyślnie przeszukuje bieżący katalog oraz wszystkie foldery wypisane w zmiennej PATH i wypisuje pełne ścieżki znalezionych plików. Używasz go, gdy chcesz sprawdzić, który dokładnie python.exe czy node.exe odpali się po wpisaniu nazwy w konsoli — bo gdy masz kilka wersji w różnych folderach, decyduje kolejność w PATH, a to bywa źródłem zagadkowych błędów.

Składnia i najważniejsze opcje

Podstawowa forma: where [/r katalog] [/q] [/f] [/t] wzorzec

  • /r katalog — rekurencyjne przeszukiwanie wskazanego katalogu i wszystkich jego podkatalogów (nie tylko PATH).
  • /q — tryb cichy: nic nie wypisuje, tylko ustawia errorlevel (0 = znaleziono, 1 = nie znaleziono). Idealne do skryptów batch.
  • /f — obejmuje każdą zwróconą ścieżkę cudzysłowami, co ratuje życie przy ścieżkach ze spacjami.
  • /t — dokłada rozmiar pliku oraz datę i godzinę ostatniej modyfikacji, w stylu wyniku dir.
  • $ENV:wzorzec — szuka w katalogach wypisanych w zmiennej środowiskowej ENV zamiast w PATH.
  • ścieżka:wzorzec — przeszukuje wskazaną ścieżkę zamiast PATH.

Jeśli nie podasz rozszerzenia, where dokleja te ze zmiennej PATHEXT (m.in. .exe, .bat, .cmd). Wzorzec przyjmuje symbole wieloznaczne * i ?.

Przykłady użycia

  • where python — pokazuje wszystkie python.exe widoczne w PATH; pierwszy z listy to ten, który faktycznie się uruchomi.
  • where /r C:\Users\Ty\Projekty *.log — znajduje rekurencyjnie każdy plik .log w drzewie projektów.
  • where /t /f node.exe — wypisuje ścieżkę do Node.js w cudzysłowach wraz z rozmiarem i datą modyfikacji.
  • where $PATH:cmd.exe — jawnie przeszukuje katalogi ze zmiennej PATH pod kątem cmd.exe.
  • where /q git && echo Git jest zainstalowany — cichy test w skrypcie: komunikat pojawi się tylko, gdy git istnieje w PATH.

Częste błędy i pułapki

Największa pułapka to mylenie where (CMD) z where.exe w PowerShellu. W PowerShellu where jest aliasem na Where-Object (filtrowanie obiektów w potoku), więc żeby wywołać właściwy program, musisz napisać pełne where.exe python. Inaczej PowerShell zamiast szukać pliku spróbuje przefiltrować pusty potok i wyjdzie z tego niezła konsternacja.

Druga sprawa: where szuka tylko w PATH i bieżącym katalogu, a nie w całym dysku. Jeśli plik jest gdzie indziej, dostaniesz INFO: Could not find files — dorzuć /r z konkretnym katalogiem. Pamiętaj też, że opcja /r musi stać przed wzorcem, a katalog podajesz zaraz po niej.

Do skryptów wybieraj /q zamiast parsowania tekstu — sprawdzanie errorlevel jest odporne na zmiany formatu wyjścia.

Powiązane komendy: w PowerShellu Get-Command i Where-Object, w systemach uniksowych which, whereis i find, a do listowania samych plików dir.