W skrócie: Windows nie ma wget z pudełka. Najszybciej zainstalujesz go poleceniem winget install JernejSimoncic.Wget albo pobierając wget.exe i dodając folder do PATH. Uwaga: wget w PowerShell to alias na Invoke-WebRequest, a nie prawdziwy GNU Wget - dlatego komendy z Linuksa nie działają.
Poniżej pokazuję krok po kroku, jak zainstalować prawdziwy GNU Wget na Windows 10 i 11, jak rozbroić pułapkę z aliasem PowerShell i od jakich komend zacząć. Bez lania wody - komendy, które możesz od razu wkleić i sprawdzić.
Czym jest wget i czemu nie ma go w Windows
GNU Wget to nieinteraktywne narzędzie wiersza polecenia do pobierania plików przez HTTP, HTTPS i FTP. Na Linuksie i macOS jest praktycznie standardem - siedzi w systemie albo doinstalowujesz go jedną komendą. Windows tego programu w obrazie systemu nie ma, więc gdy w cmd albo w skrypcie wpiszesz wget, terminal odpowie 'wget' is not recognized.
Konkret: brakuje samego pliku wget.exe i wpisu w zmiennej PATH, która mówi systemowi, gdzie szukać komend. To wszystko. Nie chodzi o żadną blokadę ani ograniczenie licencji - po prostu Microsoft nie dołącza tego narzędzia do systemu.
Po co komu wget na Windowsie? Najczęściej z jednego z tych powodów:
- przenosisz skrypt z Linuksa i chcesz, żeby te same komendy
wgetzadziałały na maszynie z Windows, - automatyzujesz pobieranie plików albo backupów w zadaniu harmonogramu,
- pobierasz duże pliki z możliwością wznowienia po zerwaniu łącza,
- robisz lokalną kopię (mirror) strony do pracy offline.
W tekście przewijają się cztery pojęcia, które warto rozdzielić: cmd (klasyczna Wiersz polecenia), PowerShell (nowsza powłoka), PATH (lista folderów, w których system szuka programów) i sam wget.exe (plik wykonywalny narzędzia). Trzymaj je osobno, bo to na ich styku rodzi się większość nieporozumień.
Pułapka PowerShell: wget to nie jest wget
To najczęstsze źródło frustracji, więc rozbrajam je od razu. W PowerShell wget działa - ale nie robi tego, czego się spodziewasz. To alias, czyli skrót, który PowerShell podstawia pod własne polecenie Invoke-WebRequest. Z prawdziwym GNU Wget nie ma nic wspólnego poza nazwą.
Sprawdź, co masz pod ręką:
Get-Alias wget
Jeśli w odpowiedzi zobaczysz wget -> Invoke-WebRequest, to znaczy, że komendy w stylu wget -r -np URL albo wget -c URL zwrócą błąd - Invoke-WebRequest nie zna tych przełączników. Stąd bierze się klasyczne pytanie "dlaczego moja komenda wget nie działa" i częsty błąd wget command not found, gdy skrypt trafia do Git Basha bez zainstalowanego pakietu.
Masz dwie drogi wyjścia. Pierwsza: zainstaluj prawdziwy wget.exe (opisuję to niżej) i wywołuj go pełną ścieżką albo tak, by trafiał wcześniej niż alias. Druga, doraźna: usuń alias w bieżącej sesji PowerShell.
Remove-Item Alias:wget
Pro tip admina: usunięcie aliasu działa tylko w otwartej sesji - po zamknięciu okna wraca. Jeśli chcesz mieć spokój na stałe, postaw prawdziwy wget i trzymaj go w PATH. Wtedy w cmd alias w ogóle nie przeszkadza, bo to zjawisko wyłącznie PowerShellowe.
Instalacja krok po kroku
Masz trzy sensowne metody plus jedną bonusową. Wybór zależy od tego, czy masz menedżer pakietów i jak "czysto" chcesz to trzymać. Poniżej każda metoda z komendami i weryfikacją.
Metoda A - winget (najszybsza na Windows 10/11)
winget to wbudowany w nowsze wersje Windows menedżer pakietów. Jedna komenda i masz gotowe:
winget install JernejSimoncic.Wget
winget pobierze paczkę, rozpakuje i sam ogarnie wpis w PATH. To najmniej roboty i moja domyślna rekomendacja, jeśli tylko masz winget.
Sprawdź: po instalacji zamknij i otwórz terminal, a potem wpisz:
wget --version
Powinieneś zobaczyć nagłówek w stylu GNU Wget 1.21.4 built on ... - to znak, że masz prawdziwe narzędzie, a nie alias.
Metoda B - ręczne pobranie wget.exe
Jeśli nie masz wingeta albo wolisz mieć kontrolę nad plikiem, pobierz binarkę ręcznie. Aktualne buildy dla Windows utrzymuje serwis eternallybored.org - w wersji 1.21.4 wget.exe przychodzi z wkompilowanymi bibliotekami OpenSSL 3.1.0, ZLib 1.2.13, gpgme 1.20.0, pcre2 10.42, libpsl 0.21.2 oraz c-ares 1.19.0 (dane projektu), więc obsługa HTTPS działa od razu, bez dokładania niczego.
Krok po kroku:
- Pobierz plik
wget.exe(wersja 64-bitowa dla współczesnego systemu). - Utwórz folder na narzędzia, na przykład
C:\tools\wget\, i wrzuć tamwget.exe. - Dodaj ten folder do PATH: wciśnij klawisz Windows, wpisz "zmienne środowiskowe", otwórz "Edytuj zmienne środowiskowe systemu", kliknij "Zmienne środowiskowe", w sekcji "Zmienne systemowe" zaznacz
Path, kliknij "Edytuj", potem "Nowy" i wklejC:\tools\wget\. - Zatwierdź wszystko przyciskiem OK i zamknij okno.
Pro tip admina: nie wrzucaj wget.exe do C:\Windows\System32, choć to kuszące i "działa od razu". Własny folder w PATH trzyma porządek - łatwiej zaktualizować, łatwiej usunąć, nie mieszasz w katalogu systemowym. To dziesięć sekund więcej przy instalacji, a lata spokoju później.
Sprawdź: otwórz nowy terminal (stary nadal ma stary PATH) i wpisz wget --version.
Metoda C - Chocolatey lub Scoop
Jeśli pracujesz z menedżerem pakietów innym niż winget, użyj tego, który już masz:
choco install wget
albo
scoop install wget
Obie komendy pobiorą wget i ustawią PATH za Ciebie. Dla programisty, który i tak zarządza narzędziami przez Chocolatey czy Scoop, to najbardziej spójna droga - wget wpada do tej samej listy, co reszta środowiska.
Bonus - WSL, czyli natywny wget przez Linuksa
Masz zainstalowany Windows Subsystem for Linux? Wtedy wget dostajesz w wersji natywnej, bo w środku działa prawdziwy Linux (Ubuntu, Kali albo inna dystrybucja):
sudo apt install wget
To ten sam wget, którego znasz z serwera - z pełnym kompletem przełączników i bez pułapki aliasu. WSL to zresztą wygodny sposób na uruchamianie całej rodziny linuksowych narzędzi CLI na Windowsie; to samo wyzwanie opisuję szerzej przy synchronizacji plików w tekście rsync na Windowsie:
wget -c https://example.com/duzy-plik.iso
Pobierz cicho, bez zalewania terminala paskiem postępu:
wget -q https://example.com/plik.zip
Zrób lokalną kopię strony (mirror), z konwersją linków do pracy offline:
wget -r -np -k https://example.com/
Przy mirrorze zachowaj kulturę: -np trzyma wget w obrębie jednego katalogu, a i tak warto uszanować robots.txt i nie zasypywać cudzego serwera setkami żądań na sekundę. Pobieranie z uwierzytelnieniem podstawowym wygląda tak:
wget --user=nazwa --password=haslo https://example.com/prywatne/plik.zip
Krok po kroku poznasz je najlepiej, klikając po kolei. A do codziennej pracy wystarczy garść flag:
| Flaga | Co robi |
|---|---|
-O |
zapis pod wskazaną nazwą pliku |
-c |
wznów przerwane pobieranie |
-r |
pobieranie rekurencyjne (mirror) |
-np |
nie wchodź do katalogów nadrzędnych |
-q |
tryb cichy, bez logów |
-P |
zapisz do wskazanego katalogu |
Częste błędy i pułapki
Objaw, przyczyna, rozwiązanie - tak jak przy każdym problemie z terminalem.
'wget' is not recognized as an internal or external command - klasyk. Przyczyna: wget.exe nie jest w PATH albo terminal wciąż pamięta starą listę. Rozwiązanie: sprawdź, czy plik leży w folderze dopisanym do PATH, a potem zamknij i otwórz terminal na nowo. Zmienne PATH ładują się przy starcie sesji, więc bez restartu okna nowy wpis nie zadziała.
wget command not found w Git Bash lub WSL - tam działa własne środowisko i wget trzeba doinstalować pakietem, na przykład sudo apt install wget w WSL. To osobny świat od wget.exe w Windowsie.
Komenda robi coś innego niż na Linuksie - prawie zawsze to alias PowerShell podstawiony pod Invoke-WebRequest. Wróć do sekcji o pułapce PowerShell i albo usuń alias, albo wołaj prawdziwy wget.
Błąd certyfikatu przy adresie https:// - wget nie ufa certyfikatowi serwera. Jest przełącznik --no-check-certificate, który to obchodzi, ale traktuj go jak ostateczność i tylko wobec zasobu, któremu ufasz. Wyłączasz wtedy weryfikację, która chroni Cię przed podstawionym serwerem. Jeśli pobierasz pliki na zdalną maszynę albo z niej, warto najpierw ogarnąć bezpieczny kanał - podstawy opisuję w tekście SSH od podstaw. Do normalnej pracy nie jest Ci potrzebny - wystarczy wget.exe.
wget czy coś innego? Alternatywy na Windows
wget nie jest jedynym narzędziem do pobierania z linii poleceń, a Windows 10 i 11 mają już coś w standardzie. Krótki przegląd, kiedy co ma sens:
curl- jest w Windowsie z pudełka od kilku lat i świetnie sprawdza się do pojedynczych pobrań, testowania API i pracy z nagłówkami. Do rekurencyjnego mirroru całej strony wget bywa jednak wygodniejszy. Pełne porównanie obu narzędzi rozkładam w tekście wget kontra curl - które narzędzie wybrać. Dobrą maszynę pod takie zadania (SSH, rsync, cron w jednym) zestawiam w rankingu VPS pod DevOps. A jeśli chcesz ogarnąć terminal szerzej niż samo wget - od podstaw CLI po Dockera - zajrzyj do zestawienia kursy DevOps od podstaw.
FAQ
Czy wget jest dostępny w Windows 10 i 11?
Nie natywnie. Windows nie dołącza GNU Wget do systemu, więc musisz go zainstalować - najszybciej przez winget install JernejSimoncic.Wget. Uwaga: w PowerShell komenda wget istnieje, ale to alias na Invoke-WebRequest, a nie prawdziwe narzędzie. Po instalacji sprawdź wersję komendą wget --version.
Dlaczego wget w PowerShell działa inaczej niż na Linuksie?
Bo w PowerShell wget to alias podstawiony pod polecenie Invoke-WebRequest. Ono nie zna przełączników GNU Wget, więc komendy w stylu wget -r czy wget -c zwracają błąd. Sprawdzisz to komendą Get-Alias wget. Rozwiązanie: zainstaluj prawdziwy wget.exe albo usuń alias poleceniem Remove-Item Alias:wget.
Jak zainstalować wget na Windows najszybciej?
Jedną komendą w terminalu z uprawnieniami: winget install JernejSimoncic.Wget. winget pobierze paczkę i sam doda wget do PATH. Alternatywnie użyjesz choco install wget albo scoop install wget, jeśli masz te menedżery. Po instalacji zamknij i otwórz terminal, potem sprawdź wget --version.
Jak naprawić błąd "wget is not recognized" albo "command not found"?
W Windowsie ten błąd oznacza, że wget.exe nie jest w PATH lub terminal pamięta starą listę - dopisz folder z wget do PATH i otwórz nowe okno terminala. W Git Bashu albo WSL to inny przypadek: tam wget trzeba doinstalować pakietem, na przykład sudo apt install wget.
wget czy curl - co wybrać na Windows?
Do pojedynczych pobrań i pracy z API weź curl - jest w Windowsie z pudełka. Do rekurencyjnego mirroru strony i skryptów przenoszonych z Linuksa wygodniejszy bywa wget. Oba narzędzia i konkretne różnice rozkładam w tekście wget kontra curl.
Jak pobrać całą stronę przez wget?
Użyj trybu rekurencyjnego: wget -r -np -k https://example.com/. Flaga -r włącza pobieranie rekurencyjne, -np trzyma wget w obrębie jednego katalogu, a -k konwertuje linki do pracy offline. Zachowaj umiar - uszanuj robots.txt i nie obciążaj cudzego serwera zbyt wieloma żądaniami naraz.