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

Środowiska wiersza polecenia, takie jak Windows Command Prompt i PowerShell, używają spacji do oddzielania poleceń i argumentów, ale nazwy plików i folderów mogą również zawierać spacje. Aby określić ścieżkę do pliku zawierającą spację, musisz ją „uciec”.

Wiersz poleceń 101: dlaczego musisz uciekać ze spacji

„Ucieczka” postaci zmienia jej znaczenie. Na przykład zmiana znaczenia znaku spacji spowoduje, że powłoka będzie traktować go jak standardowy znak spacji, a nie znak specjalny, który oddziela argumenty wiersza poleceń.

Na przykład, powiedzmy, że masz plik tekstowy, którego zawartość chcesz zobaczyć. Możesz to zrobić za pomocą polecenia type. Zakładając, że plik tekstowy znajduje się w C: TestFile.txt, następujące polecenie w wierszu polecenia pokaże jego zawartość:

type C:TestFile.txt

Świetny. A co, jeśli masz ten sam plik w C: Test FolderTest File.txt? Jeśli spróbujesz uruchomić poniższe polecenie, nie zadziała – te spacje w ścieżce pliku przeszkadzają.

type C:Test FolderTest File.txt

Wiersz poleceń myśli, że próbujesz znaleźć plik o nazwie C: Test i mówi, że „nie można znaleźć określonej ścieżki”.

Błąd wiersza polecenia bez zmiany znaczenia spacji

Trzy sposoby na ucieczkę z przestrzeni w systemie Windows

Istnieją trzy różne sposoby zmiany znaczenia ścieżek plików w systemie Windows:

Poprzez ujęcie ścieżki (lub jej części) w podwójne cudzysłowy (”).
Dodając znak daszka (^) przed każdą spacją. (Działa to tylko w wierszu polecenia / CMD i wydaje się, że nie działa z każdym poleceniem).
Dodając znak akcentu (`) przed każdą spacją. (Działa to tylko w PowerShell, ale zawsze działa).

Pokażemy Ci, jak używać każdej metody.

Umieść ścieżkę w cudzysłowie (”)

Standardowym sposobem upewnienia się, że system Windows prawidłowo traktuje ścieżkę pliku, jest umieszczenie jej w podwójnych cudzysłowach (”). Na przykład, używając naszego przykładowego polecenia powyżej, po prostu uruchomilibyśmy następujące polecenie:

type "C:Test FolderTest File.txt"

Jeśli wolisz, możesz ująć części ścieżki w cudzysłów. Na przykład, powiedzmy, że masz plik o nazwie File.txt w tym folderze. Możesz uruchomić następujące:

type C:"Test Folder"File.txt

Nie jest to jednak konieczne – w większości przypadków możesz po prostu użyć cudzysłowu na całej ścieżce.

To rozwiązanie działa zarówno w tradycyjnym środowisku Command Prompt (CMD), jak iw Windows PowerShell.

Ujęcie spacji w podwójne cudzysłowy w wierszu polecenia

Czasami: użyj znaku Caret, aby uciec ze spacji (^)

W wierszu polecenia znak daszka (^) pozwoli ci uciec ze spacji – w teorii. Po prostu dodaj go przed każdą spacją w nazwie pliku. (Ten znak znajdziesz w rzędzie liczb na klawiaturze. Aby wpisać znak daszka, naciśnij Shift + 6).

Oto problem: chociaż to powinno działać i czasami działa, nie działa przez cały czas. Obsługa tego znaku w wierszu polecenia jest dziwna.

Na przykład za pomocą naszego przykładowego polecenia uruchomisz następujące polecenie i nie zadziała:

type C:Test^ FolderTest^ File.txt

Błąd zmiany znaczenia spacji kursora w wierszu polecenia

Z drugiej strony, jeśli spróbujemy otworzyć nasz plik bezpośrednio, wpisując jego ścieżkę w wierszu polecenia, zobaczymy, że znak daszka prawidłowo ucieka spacje:

C:Test^ FolderTest^ File.txt

Przestrzeń Caret uciekająca działająca w wierszu polecenia

Więc kiedy to działa? Cóż, na podstawie naszych badań wydaje się, że działa z niektórymi aplikacjami, a nie z innymi. Twój przebieg może się różnić w zależności od używanego polecenia. Obsługa tego znaku w wierszu polecenia jest dziwna. Spróbuj z dowolnym poleceniem, którego używasz, jeśli jesteś zainteresowany – może zadziałać lub nie.

Aby zachować spójność, zalecamy trzymanie się podwójnych cudzysłowów w wierszu polecenia – lub przełączenie się na program PowerShell i użycie poniższej metody z akcentem słabym.

PowerShell: użyj znaku akcentu Grave (`)

PowerShell używa znaku akcentu poważnego (`) jako znaku ucieczki. Po prostu dodaj go przed każdą spacją w nazwie pliku. (Znajdziesz ten znak nad klawiszem Tab i pod klawiszem Esc na klawiaturze.)

type C:Test` FolderTest` File.txt

Każdy znak z poważnym akcentem mówi PowerShell, aby uniknął następującego znaku.

Zwróć uwagę, że działa to tylko w środowisku PowerShell. Będziesz musiał użyć znaku daszka w wierszu polecenia.

Ucieczka z przestrzeni z poważnym akcentem w PowerShell

Jeśli znasz systemy operacyjne podobne do UNIX, takie jak Linux i macOS, możesz przyzwyczaić się do używania znaku ukośnika odwrotnego () przed spacją, aby go uciec. Windows używa tego do normalnych ścieżek plików, więc nie działa – – znaki daszka (^) i słaby akcent (`) są wersją ukośnika odwrotnego systemu Windows, w zależności od używanej powłoki wiersza poleceń.