Jak spakować (i rozpakować) pliki za pomocą PowerShell

Format ZIP umożliwia kompresję plików, łącząc je w jeden archiwum, co pozwala zaoszczędzić miejsce na dysku, zwiększa bezpieczeństwo danych oraz ułatwia ich przesyłanie. Poniżej przedstawiamy sposób pakowania i rozpakowywania plików za pomocą PowerShell.

Jak spakować pliki przy użyciu PowerShell

Rozpocznijmy od kompresji wybranych plików do formatu ZIP za pomocą polecenia cmdlet Compress-Archive. Komenda ta przyjmuje jako argumenty ścieżki do plików, które chcesz skompresować – można podać wiele plików, oddzielając je przecinkami – i zapisuje je w wybranym przez Ciebie miejscu.

Aby to zrobić, otwórz PowerShell, wpisując go w menu Start, a następnie użyj poniższego polecenia, zamieniając i na odpowiednie ścieżki do plików oraz lokalizację, w której chcesz zapisać archiwum:

Compress-Archive -LiteralPath  -DestinationPath 

Podczas określania docelowej ścieżki, możesz nadać archiwum własną nazwę. W przeciwnym razie PowerShell zapisze je z domyślnym rozszerzeniem „.zip” w wybranej lokalizacji.

Warto pamiętać, że cudzysłowy wokół ścieżki są niezbędne jedynie wtedy, gdy zawiera ona spacje.

Jeśli chcesz spakować całą zawartość folderu, w tym wszystkie podfoldery, użyj poniższego polecenia, zmieniając oraz na odpowiednie ścieżki:

Compress-Archive -LiteralPath  -DestinationPath 

W tym przykładzie podajemy ścieżkę do katalogu, który zawiera wiele plików oraz folderów, nie wskazując żadnych pojedynczych plików. PowerShell skompresuje wszystkie elementy znajdujące się w katalogu głównym oraz jego podfolderach.

Cmdlet Compress-Archive pozwala również na wykorzystanie znaków wieloznacznych, co zwiększa jego możliwości. Dzięki temu możesz zredukować zakres kompresji, na przykład pomijając folder główny lub kompresując tylko pliki określonego typu. Aby użyć znaku wieloznacznego, należy skorzystać z parametru -Path, ponieważ -LiteralPath nie akceptuje takich symboli.

Compress-Archive -Path C:pathtofile* -DestinationPath C:pathtoarchive.zip

Aby pominąć folder główny i skompresować jedynie jego zawartość, wystarczy dodać gwiazdkę na końcu ścieżki, co poinstruuje PowerShell do pobrania tylko plików znajdujących się w katalogu głównym:

Compress-Archive -Path C:pathtofile*.jpg -DestinationPath C:pathtoarchive.zip

Załóżmy, że masz folder zawierający różnorodne typy plików (.doc, .txt, .jpg itp.), ale chcesz skompresować jedynie jeden z nich. Możesz to zrobić, informując PowerShell, aby zarchiwizował tylko te pliki, ignorując resztę. Polecenie wyglądałoby tak:

Compress-Archive -Path C:pathtofile*.* -DestinationPath C:pathtoarchive.zip

Na koniec, jeśli chcesz utworzyć archiwum, które kompresuje tylko pliki z katalogu głównego oraz wszystkie jego podfoldery, możesz wykorzystać symbol wieloznaczny *.* do ich spakowania. Wyglądałoby to tak:

Compress-Archive -Path C:pathtofiles -Update -DestinationPath C:pathtoarchive.zip

Możesz również zaktualizować istniejący plik ZIP po zakończeniu procesu archiwizacji, używając parametru -Update. Pozwala on na zastąpienie starszych wersji plików w archiwum nowszymi wersjami, które mają te same nazwy oraz dodanie nowych plików, które pojawiły się w katalogu głównym.

Aby rozpakować pliki z archiwum przy użyciu PowerShell, wystarczy skorzystać z komendy Expand-Archive. Proces ten jest prostszy niż kompresja; wszystko, czego potrzebujesz, to ścieżka do pliku ZIP i miejsce, gdzie chcesz umieścić wypakowane dane. Oto jak to zrobić:

Expand-Archive -LiteralPath  -DestinationPath 

W tym poleceniu zastąp i odpowiednimi ścieżkami do pliku ZIP oraz lokalizacji, w której chcesz wypakować zawartość.

Folder, do którego wyodrębniasz pliki, zostanie wypełniony zawartością archiwum. Jeśli wskazany folder nie istnieje przed rozpakowaniem, PowerShell automatycznie go utworzy i umieści w nim wszystkie pliki.

W przypadku wcześniejszego pominięcia parametru -DestinationPath, PowerShell utworzy folder o nazwie „Archive” w lokalizacji „C: Usersbrady” i wypakuje pliki do tego folderu.

Jeśli nie określisz parametru -DestinationPath, program PowerShell rozpakowuje plik ZIP do aktualnie wybranego katalogu.

Jeśli folder docelowy już istnieje, PowerShell zgłosi błąd podczas próby rozpakowania plików. Możesz jednak wymusić na PowerShell zastąpienie istniejących danych nowymi, stosując parametr -Force.

Parametr -Force powinien być używany z rozwagą, tylko wtedy, gdy nie potrzebujesz już starych plików, ponieważ spowoduje to ich nieodwracalne usunięcie.