Jak unikać spacji w ścieżkach plików w wierszu poleceń systemu Windows

Photo of author

By maciekx

Wiersze polecenia, takie jak Windows Command Prompt oraz PowerShell, posługują się spacjami do oddzielania poleceń od argumentów. Jednak nazwy plików i katalogów mogą również zawierać spacje. Aby poprawnie określić ścieżkę do pliku, która zawiera spacje, konieczne jest ich „uciekanie”.

Wiersz poleceń 101: zasady ucieczki ze spacji

„Ucieczka” znaku zmienia jego interpretację. Na przykład, zmieniając znaczenie spacji, sprawisz, że powłoka uzna ją za standardowy znak, a nie za symbol separujący argumenty.

Przykładowo, jeśli chcesz wyświetlić zawartość pliku tekstowego, możesz użyć polecenia type. Załóżmy, że plik znajduje się w C:\TestFile.txt, wiersz polecenia do jego wyświetlenia wyglądałby następująco:

type C:\TestFile.txt

Świetnie. Co jednak, gdy ten sam plik jest umieszczony w C:\Test Folder\Test File.txt? Próba uruchomienia poniższego polecenia nie powiedzie się – spacje w nazwie pliku będą przeszkadzać.

type C:\Test Folder\Test File.txt

Wiersz polecenia zinterpretuje to jako próbę odnalezienia pliku o nazwie C:\Test i zgłosi błąd „nie można znaleźć określonej ścieżki”.

Trzy metody uciekania ze spacji w systemie Windows

Istnieją trzy różne sposoby, aby zmienić interpretację ścieżek plików w systemie Windows:

  • Umieszczając całą ścieżkę lub jej fragmenty w podwójnych cudzysłowach (”).
  • Dodając znak daszka (^) przed każdą spacją. (To działa tylko w wierszu polecenia i nie jest niezawodne w przypadku każdego polecenia).
  • Używając znaku akcentu (`) przed każdą spacją. (Ta metoda działa w PowerShell i jest zawsze skuteczna).

Poniżej przedstawimy, jak stosować każdą z tych metod.

Umieszczanie ścieżki w cudzysłowach (”)

Najbardziej standardowym sposobem, aby Windows prawidłowo zinterpretował ścieżkę pliku, jest umieszczenie jej w podwójnych cudzysłowach (”). Na przykład, dla naszego przykładowego polecenia moglibyśmy uruchomić:

type "C:\Test Folder\Test File.txt"

Możesz również umieścić w cudzysłowach tylko fragmenty ścieżki. Na przykład, jeśli masz plik o nazwie File.txt w tym folderze, możesz użyć:

type C:\"Test Folder"\File.txt

W większości przypadków wystarczy jednak umieścić całą ścieżkę w cudzysłowach.

Ta metoda działa zarówno w tradycyjnym wierszu poleceń (CMD), jak i w Windows PowerShell.

Czasami: znak Caret do uciekania ze spacji (^)

W wierszu polecenia znak daszka (^) teoretycznie pozwala na uciekanie ze spacji. Dodaj go przed każdą spacją w nazwie pliku. (Znak ten znajduje się w rzędzie cyfr na klawiaturze – aby go wpisać, naciśnij Shift + 6).

Jednakże, chociaż powinno to działać, w praktyce zdarza się, że nie jest niezawodne. Obsługa tego znaku w wierszu polecenia bywa nieprzewidywalna.

Na przykład, używając naszego przykładowego polecenia, jeśli wpiszesz:

type C:\Test^ Folder\Test^ File.txt

to nie zadziała.

C:\Test^ Folder\Test^ File.txt

Kiedy to działa? Z naszych obserwacji wynika, że metoda ta sprawdza się z niektórymi aplikacjami, a z innymi nie. W zależności od polecenia, które używasz, może ona zadziałać lub nie. Dlatego dla pewności zalecamy korzystanie z podwójnych cudzysłowów w wierszu polecenia lub przejście do PowerShell i użycie metody z akcentem.

PowerShell: użycie znaku akcentu (`)

W PowerShell znak akcentu (`) pełni rolę znaku ucieczki. Dodaj go przed każdą spacją w nazwie pliku. (Znak ten znajduje się nad klawiszem Tab i pod klawiszem Esc na klawiaturze).

type C:\Test` Folder\Test` File.txt

Każdy znak akcentu instruuje PowerShell, aby zignorował następujący znak.

Warto zauważyć, że ta metoda działa wyłącznie w PowerShell. W wierszu polecenia wciąż musisz korzystać z znaku daszka.

Jeśli znasz systemy operacyjne podobne do UNIX, takie jak Linux czy macOS, możesz być przyzwyczajony do używania znaku ukośnika odwrotnego (\) przed spacją, aby ją „uciec”. W systemie Windows jednak nie działa to – znaki daszka (^) i akcentu (`) są odpowiednikami ukośnika odwrotnego w kontekście Windows, w zależności od używanej powłoki.


newsblog.pl