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

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

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

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

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

type C:TestFile.txt

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

type C:Test FolderTest File.txt

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

  Как перевернуть видео в Windows 10 с помощью Handbrake

Ошибка командной строки при отсутствии экранирования пробелов

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

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

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

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

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

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

type "C:Test FolderTest File.txt"

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

type C:"Test Folder"File.txt

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

  Как установить карты в приложение Minecraft UWP для Windows 10

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

Заключение пробелов в двойные кавычки в командной строке

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

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

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

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

type C:Test^ FolderTest^ File.txt

Ошибка экранирования пробела в командной строке

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

C:Test^ FolderTest^ File.txt

Экранирование пробела каретки работает в командной строке

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

  Как запускать приложения Windows в Linux с помощью Wine

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

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

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

type C:Test` FolderTest` File.txt

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

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

Побег из пространств с серьезным акцентом в PowerShell

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