Как избежать пробелов в путях к файлам в командной строке Windows

5 февраля 2021 |

Как избежать пробелов в путях к файлам в командной строке Windows

Command Prompt window on Windows 10

Среды командной строки, такие как командная строка Windows и PowerShell, используют пробелы для разделения команд и аргументов, но имена файлов и папок также могут содержать пробелы. Чтобы указать путь к файлу с пробелом внутри, вам нужно «экранировать» его.

Командная строка 101: почему вам нужно избегать пробелов

«Экранирование» символа меняет его значение. Например, экранирование пробела заставит оболочку рассматривать его как стандартный пробел, а не как специальный символ, разделяющий аргументы командной строки.

Например, допустим, у вас есть текстовый файл, который вы хотите посмотреть содержимое. Вы можете сделать это с помощью команды type. Предполагая, что текстовый файл находится в C: TestFile.txt, следующая команда в командной строке покажет его содержимое:

type C: TestFile.txt

Отлично. А что, если у вас есть тот же файл в папке C: Test FolderTest File.txt? Если вы попытаетесь выполнить команду ниже, это не сработает — эти пробелы в пути к файлу мешают.

тип C: Test FolderTest File.txt

Командная строка считает, что вы пытаетесь посмотреть для файла с именем C: Test и сообщает, что «не может найти указанный путь.”

Command Prompt error when not escaping spaces

Три способа избежать пробелов в Windows

Есть три разных способа избежать пути к файлам в Windows:

  • Включив путь (или его части) в двойных кавычках (”).
  • Путем добавления символа вставки (^) перед каждым пробелом. (Это работает только в командной строке / CMD и, похоже, не работает с каждой командой.)
  • Добавляя серьезный знак ударения (`) перед каждым пробелом. (Это работает только в PowerShell, но работает всегда.)

Мы покажем вам, как использовать каждый метод.

Заключите путь в кавычки (»)

Стандартный способ убедиться, что Windows правильно обрабатывает путь к файлу: заключить его в двойные кавычки («)». Например, в нашем примере команды, приведенном выше, мы просто выполняем вместо этого следующее:

type «C: Test FolderTest File.txt»

Вы можете заключить части пути в кавычки, если хотите. Например, предположим, что у вас есть файл с именем File.txt в этой папке. Вы можете запустить следующее:

type C: «Test Folder» File.txt

Однако в этом нет необходимости — в большинстве случаев вы можете просто использовать кавычки вокруг всего пути.

Это решение работает как в традиционной среде командной строки (CMD), так и в Windows PowerShell.

Enclosing spaces in double quotation marks in the Command Prompt

Иногда: используйте символ каретки для выхода из пробелов (^)

в в командной строке символ каретки (^) теоретически позволит вам избежать пробелов. Просто добавьте его перед каждым пробелом в имени файла. (Вы найдете этот символ в числовом ряду на клавиатуре. Чтобы ввести символ каретки, нажмите Shift + 6.)

Вот проблема: хотя это должно работать, а иногда и работает, это не так ‘ т работать все время. Командная строка обрабатывает этот символ странно.

Например, с помощью нашего примера команды вы выполнили следующую команду, но она не сработает:

введите C: Test ^ FolderTest ^ File.txt

Caret space escaping error in Command Prompt

С другой стороны, если мы попробуем открыть наш файл напрямую, введя его путь в командную строку, мы увидим, что символ каретки правильно экранирует пробелы:

C: Test ^ FolderTest ^ File.txt

Caret space escaping working in the Command Prompt

Итак, когда это сработает? Что ж, исходя из нашего исследования, похоже, что с некоторыми приложениями он работает, а с другими — нет. Ваш пробег может варьироваться в зависимости от команды, которую вы используете. Командная строка обрабатывает этот символ странно. Попробуйте использовать любую команду, которую вы используете, если вам интересно — она ​​может работать, а может и не работать.

Для единообразия мы рекомендуем использовать двойные кавычки в командной строке или переключиться на PowerShell. и используйте метод серьезного акцента ниже.

PowerShell: используйте символ серьезного ударения (`)

PowerShell использует символ серьезного акцента (`) в качестве escape-символа. Просто добавьте его перед каждым пробелом в имени файла.(Вы найдете этот символ над клавишей Tab и под клавишей Esc на клавиатуре.)

введите C: Test` FolderTest` File.txt

Каждый знак серьезного акцента сообщает PowerShell, что нужно экранировать следующий символ.

Обратите внимание, что это работает только в среде PowerShell. Вам нужно будет использовать символ вставки в командной строке.

Escaping spaces with the grave accent in PowerShell

Если вы знакомы с UNIX-подобными операционными системами, такими как Linux и macOS, вы, возможно, привыкли использовать символ обратной косой черты () перед пробелом для экранирования. Это. Windows использует его для обычных путей к файлам, поэтому он не работает — символы вставки (^) и серьезного ударения (`) являются версией обратной косой черты Windows в зависимости от того, какую оболочку командной строки вы используете.

Как избежать пробелов в путях к файлам в командной строке Windows


Напишите пару строк: