Пробел в командной строке windows

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

Почему нужно избегать символ пробела?

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

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

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

type C:\Новая папка\File.txt

Командная строка считает, что вы пытаетесь найти файл с именем Новая, в результате вы получаете: «Ошибка во время обработки: C:\Новая.
Системе не удается найти указанный путь.».
Тоже самое будет? если пробел есть в имени файла New File.txt

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

Три способа избежать ошибок из-за символа пробел в Windows 10

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

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

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

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

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

type "C:\Новая папка\Test File.txt"

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

type C:\"Новая папка"\File.txt

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

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

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

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

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

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

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

type C:\Новая^ папка\Test^ File.txt

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

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

C:\Новая^ папка\Test^ File.txt

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

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

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

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

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

type C:\Новая` папка\Test` File.txt

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

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

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

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

Неочевидное поведение команд в командной строке.

Создав супер быстрый алгоритм BAT CMD, сумевший ушатать интерпретатор командной строки Windows — я столкнулся с неожиданно неочевидным поведением команд, о котором если и догадывался ранее, то — весьма туманно и неопределённо … Даже, не знаю — с чего начать ))) …

Установщик SET.

Давайте начнём с команды установщика SET … Почему — установщик ? …

Помогая выполнять арифметические операции SET /A B=2+5 эта команда принимает + как руководство к действию, сумматор, и вычисляя 2+5 — устанавливает переменной %B% значение =7 … Можно сказать, и — присваивает … Но …

присвоить — assign, appropriate … значить — пометить, заимствовать себе … в то время, как …

установить — install, place, mount, fix, specify, adjust, fit … что в переводе с английского — объединяет все действия к общей идее — установить нечто — на своё место ; приспособить — таким образом, чтобы со всех сторон, это выглядело — правильно … Поэтому, установщик — наиболее подходящее слово … Тем более, в других языках, оператор присваивания, это знак = равно …

Тем, более — SET — не только вычисляет … А, вот и — подходящий пример …

Установите переменной а значение & …

SET a=& … не работает … ECHO %a% = %a% …

Наверно, надо экранировать символ … Среди специальных символов, используемых в командной строке, можно выделить следующие : & | > < / ? * % , которые используются для соединения команд, перенаправления ввода / вывода, поиска файлов по маске и т.д. … Амперсанд — входит в их число, и подлежит экранированию …

Что, чем и как экранировать ? … символ ^ экранирует практически всё, включая самого себя … Подробнее про экранирование спец символов, можно будет прочитать — ниже …

Значит нужно экранировать — так : ^& … Пробуем …

SET a=^& … не работает … ECHO %a% = Режим вывода команд на экран (ECHO) включен …

Ого, крепкий орешек ))) …

Начинаем искать специальные знания и натыкаемся на совет — использовать кавычки … Обычно, кавычки применяются, когда нужно игнорировать пробел в значении переменной, обычно воспринимаемый, как — делитель параметров … Также, кавычки — являются своеобразным экраном текстовых символов и строк … Что же — пробуем …

SET «a=&» … не работает … ECHO %a% = Режим вывода команд на экран (ECHO) включен … Тот же вид, только сбоку ))) … Ну, что же, поскольку мыслей больше нет — объединяем все известные способы — в одно целое …

SET «a=^&» … ура … заработало … ECHO %a% = & …

Посмотрите, вам не кажется эта запись кавычек — совершенно неочевидной … Наверное правильнее, было бы записать это выражение — так …

SET a=»^&» … Оказывается — нет … Эта запись — неправильная … Оказывается ещё и то, что команда SET — уже имеет неявные кавычки, которые гласят : всё, что находится внутри кавычек — принадлежит переменной a …

SET a=»^&» … ECHO %a% = «^&» … Явные кавычки и то, что экранировано внутри них — стало принадлежать неявным кавычкам и, соответственно — оператору / переменной а … Вот это наиболее яркий пример совершенно неочевидного поведения интерпретатора командной строки …

В случае математики, этот пример — не показывает такой нужной наглядности …

SET /A «a=2+5″ или SET /A a=»2+5» всё равно дают a = 7…

Теперь, посмотрим кавычки с пробелом в пути …

SET a=c:\my folder … ECHO %a% = c:\my folder … Пока вы оперируете переменной внутри интерпретатора командной строки — кавычки не имеют большого значения (до сложных случаев экранирования спецсимволов) … В 99% стандартных операций с текстом и числами, кавычки — не потребуются …

Создадим папку c:\my folder и внутри my folder.txt и выполнить команду …

DIR %a% … Содержимое папки c:\ — файл не найден … Содержимое папки c:\users\user — файл не найден …

DIR «c:\my folder» … Явным прямым указанием проверяем, есть ли такой каталог на диске, а в кавычках — потому-что есть пробелы в пути … Содержимое папки c:\my folder … файл my folder.txt … Всё прекрасно видится и читается … Изменяем команду установщика пути …

SET «a=c:\my folder» … ECHO %a% = c:\my folder … Эта команда — снова не подойдёт, так как не содержит кавычек, экранирующих пробелы в пути …

SET a=»c:\my folder» … Именно в этом случае, нужен — неправильный вариант команды, который фактически выглядит, как SET «a=»c:\my folder»» — внутри неявных кавычек SET …

ECHO %a% = «c:\my folder» … Проверяем значение переменной … Другое дело ))) …

DIR %a% … Проверяем DIR … Содержимое папки c:\my folder … файл my folder.txt … Всё работает … Когда вы используете пробелы или спец символы — в виде текста команды, в интерфейсе командной строки Windows — они подлежат экранировке, чтобы не быть интерпретированными — как управляющий операторы или конструкции синтаксиса …

Командная строка. Интерпретатор CMD. Интерфейс Windows.

Многие, наблюдая черный экран DOS в среде Windows — воспринимают его, как обычную программу CMD.EXE, считая этот способ взаимодействия с компьютером и ОС — страшным, сложным, непрактичным и устаревшим ))) … После много красочной Windows — очень некомфортно оказаться в среде, без графического интерфейса и визуальной обратной связи … На самом деле, это — одно из жесточайших и неочевидных заблуждений … Нужно явно понимать, что эти разные концепции командной строки, интерпретатор CMD и интерфейс Windows — тесно интегрированы одно в другое … Отсюда и проистекает понимание, того — как воспринимать спец символы — в зависимости от среды обработки …

Интерпретатор CMD командной строки … Если специальные символы или управляющие операторы используются для вычислений параметров и результатов команды — внутри самой себя — спецсимволы должны экранироваться, чтобы отменить их специальное действие и представить их в виде обычных тексто / графических символов …

Напечатать строку a > b … Это — не выражение, и не переменные — обычный текст …

ECHO a > b … не даст ничего — бред, с точки зрения интерпретатора …

«ECHO a > b» … заставить интерпретатор ответить явно, в чем бред ? ))) … не является внутренней или внешней командой, исполняемой программой или пакетным файлом …

ECHO «a > b» … напечатает «a > b» , так как кавычки — отменяют действие оператора перенаправления > и попадают в область действия неявных кавычек ECHO, поэтому — тоже будут отображены …

ECHO a ^> b … напечатает a > b … экранировать только действие оператора перенаправления (среди текстовых символов) … В ответ — ECHO напечатает обычные символы, как эхо в горах — что крикнешь, то и услышишь ))) …

Интерфейс Windows командной строки

SET a=3

SET b=5

ECHO %a%>%b% … так как % попытался экранировать символ перенаправления > , а ECHO — не смогла сказать чего либо внятного — она отрапортовала, что : Режим вывода команд на экран (ECHO) включен … То есть — команда сообщила свой статус …

ECHO %a% > %b% … ничего, тишина ))) … Попробуем заставить CMD дать явный ответ …

«ECHO %a%>%b%» … «ECHO %a% > %b%» … echo 3>5 и echo 3 > 5 — действительно не являются никакими командами, а Эхо не может заместить или пере вычислить значение одним оператором — в другом …

ECHO %a%+=%b% … напечатает 3+=5 … это просто текст …

ECHO %a% … отобразит значение переменной a = 3 …

Однако, ECHO %a% > nul … не отобразит вывод Эхо, перенаправив его в специальный контроллер nul — это специальное устройство в операционной системе Windows, которое используется для отключения вывода текста в командной строке … нулевое устройство — есть, но не сохраняет вывод команд … что то вроде ассемблерной команды NOP — ничего не делать … Однако, ничего не делая, команда — тратит процессорное время, создаёт задержки, выравнивает блоки в памяти и вообще — является реальной командой с возможностью обращения к ней (программная заглушка) …

Однако, ECHO %a%>nul … Эхо снова сообщит свой статус, так как % снова попытается экранировать символ перенаправления и будет сбивать с толку интерпретатор данных и команд … Но, на самом деле, в обычном программном коде, подобная запись, без пробелов — практически не вызывает проблем, насколько я могу вспомнить … Какое значение имеет пробел в данных и командах BAT CMD ? …

Суть сравнения интерпретатора CMD и интерфейса Windows одного и того же выражения / окна командной строки — в том, что если неочевидно, к какому результату приведет действие той или иной команды, расположения спецсимволов и пробелов — лучше убедиться, в этом — заранее ))) …

Пробел в командах и данных BAT CMD.

Иногда, для красоты кода, в примерах программирования, команды, данные и спец символы управляющих конструкций — вводят через пробел …

SET a = 3 … результат ECHO %a% = 3 , но иногда может быть %a% = %a% , то есть — переменная не была пере / или — определена …

SET a = 3 ; SET a = 4 … результат ECHO %a% = 3 … Снова — бардак на раздаче … Эта ситуация может сложиться из-за неопределенного состояния регистров интерпретатора (предположение) после выполнения прошлых команд … Но, согласитесь, в этом — что-то есть и кроется какой-то нюанс ))) …

SET b=4 … ECHO %b% = 4 …

SET b=5 … ECHO %b% = 5 … Никаких проблем — не наблюдается … Сравните с предыдущим примером ECHO %a%>nul и ECHO %a% > nul …

Пробелы в командах BAT CMD имеют важное значение, поскольку они используются для разделения аргументов командной строки … В большинстве случаев пробелы между аргументами нужны, чтобы команда корректно выполнилась … Однако, есть некоторые случаи, когда в командах нужно использовать кавычки для защиты пробелов внутри аргументов …

Также пробелы — могут быть использованы в данных, передаваемых в команду … Если данные содержат пробелы, то их также нужно заключать в кавычки или экранировать символом ^ чтобы команда работала правильно …

Режим SetLocal EnableDelayedExpansion — может быть полезным и рекомендуется, так как позволяет использовать переменные — с пробелами внутри значений … В любом случае, использование пробелов в командах и данных в командной строке следует использовать — осторожно и — правильно экранировать символы, если это необходимо для корректной работы программного кода …

Программные файлы интерфейсы физического оборудования ПК.

В командах BAT CMD, кроме NUL — есть несколько других специальных файлов-устройств, которые могут использоваться в качестве контролов … Эти файлы-устройства предоставляют доступ к различным физическим устройствам компьютера через командную строку и могут быть использованы как входные и выходные интерфейсы для команд …

CON — консольный ввод / вывод, для ввода с клавиатуры и вывода на экран …

PRN — принтер, для вывода команд на принтер …

LPT1 (LPT2 , LPT3) — параллельные порты коммуникации ПК, в настоящее время устарели и могут быть задействованы через драйвера ОС адаптеров переходников USB — LPT …

COM1 (COM2 , [COM3 , COM4]) — последовательные порты ввода / вывода и обмена данными ПК c периферийными устройствами … В настоящее время — практически устарели, но ещё очень много софта и программ требует их для своей работы, и они могут быть задействованы через драйвера ОС широко распространенных версий адаптеров переходников USB — COM / RS-232 …

Различные наглядные примеры использования программных файлов физических устройств в командах BAT / CMD … COPY file.txt CON … DIR > LPT1 … ECHO %a% > COM1 … Однако — следует быть осторожными при использовании этих файлов-устройств, поскольку неверное использование может привести к непредсказуемым результатам, ошибкам устройства и прочим неожиданно / неприятным событиям …

Передача параметров между сценариями BAT CMD.

Для передачи параметров из одного .bat файла в другой, можно использовать оператор CALL … Эта команда вызывает один сценарий из другого, при этом некоторые данные можно передать, как входные параметры для вызываемого файла, до 9, через разделитель пробел …

CALL 2.bat aaa bbb ccc …

При запуске, BAT / CMD умеет принимать параметры %0 — %9, при этом %0 — уже занят текущим именем файла (текущим расположением пути запуска скрипта) …

CALL b.cmd … %0 = b.cmd ; остальные параметры — пустые (не определены) …

CALL b.cmd a b c d e f g h i j k l m n o … Пытаемся передать 15 параметров, и получаем … %0=b.cmd … %1=a … %2=b … %3=c … %4=d … %5=e … %6=f … %7=g … %8=h … %9=i … — это, то, что можно явно передать, как параметры … Но, если продолжить, то увидим : %10=a0 … … %11=a1 … %12=a2 … %13=a3 … %14=a4 … %15=a5 … Какие-то индексы неопределённых внутренних структур …

CALL b.cmd … Если же — вызвать сценарий скрипта — без параметров, но попытаться считать те же самые %0 — %15, то увидим — такую картину : b.cmd . . . . . . . . . 0 1 2 3 4 5 , где точки — это пустые, но осязаемые пробелы …

Модификатор %~1 используется для удаления любых кавычек, которые могут быть включены в параметр для защиты от пробелов … Нужные кавычки, также — передаются внутри кавычек, с последующим очищением внешних — модификатором %~ получения и преобразования входного параметра …

Упоминалось, что если параметр содержит знак = в начале имени — то от него невозможно отделаться никоим образом или способом … В моём случае на CMD Win7, это — не подтвердилось (=x обрезается до x ; кавычки — снимаются ) … Пример — ниже … Для удобства я располагаю его вертикально, чтобы было понятно, какой слева отправляемый параметр и справа — принимаемый …

%% … a.cmd … b.cmd

%0 … — … b.cmd

%1 … «a b» … «a b»

%2 … «c d» … «c d»

%3 … =e … e

%4 … «=f» … «=f»

%~5 … «=g» … =g

%6 … h … h

%7 … i … i

%8 … j … j

%9 … k … k

Несмотря на то, что внешне — всё работает исправно, сложные случаи параметров рекомендуется передавать — через внешние файлы …

Прочие особенности команд командной строки.

О сложности, неадекватности, неожиданности, непредсказуемости и неочевидности поведения команд командной строки, можно писать, если не вечно, то — много и долго ))) … Несмотря, на всю простоту и примитивность BAT CMD интерпретатора …

RANDOM.

Я не заметил никакой принципиальной разницы между %RANDOM% и !RANDOM!, хотя упоминается, что она — есть ))) …

SET.

Команда SET может неявно обрезать пробелы в начале и конце значения переменной, если ее определение задано с пробелами … Но я бы сильно не рекомендовал полагаться на неочевидность и непредсказуемость её поведения ))) …

SET a= 5 … ECHO %a% = пробел5 …

FOR.

В команде FOR имеется неявное поведение, когда переменная цикла $ может не подставляться, если она используется в блоке команд FOR сразу после DO — вернет только первый вариант %i, но не второй и третий … Не знаю, у меня — работает …

FOR %%I IN (1) DO ECHO %%I %%I %%I … ответ : 1 1 1 …

ECHO.

В команде ECHO есть неявный символ перевода строки, добавляющийся в конец строки — может создавать проблемы, если не учитывать его влияние …

ECHO /n aaa — запрет переноса строки — не работает, в моём случае … так и в справке по команде — нет этой опции ))) …

START.

Команда имеет неявное поведение, когда она используется для запуска графического интерфейса (GUI) … При запуске графического интерфейса с помощью команды START будет создан новый экземпляр командной строки, что может привести к непредвиденным результатам, если большинство команд ожидает выполнения — в той же командной строке …

DIR.

В случае с командой DIR, спецсимволы &, <, > или | — не требуют экранирования, так как они используются только для операций в командной строке, а не внутри команды DIR самой в себе …

Экранирование спецсимволов.

Действительно, при работе в языке BAT и CMD символы %, !, ^, «, &, ?, *, / — имеют особое значение … Для того чтобы использовать их в командной строке, необходимо использовать экранирование символов … Что, чем и как экранировать ? …

Символ ^ экранирует практически всё, включая самого себя … Символ ^ используется в CMD / BAT для экранирования символов …

Амперсанд &, оператор объединения команд в одной строке …

Угловые скобки < >, оператор перенаправления …

Вертикальная черта / штрих |, оператор конвейера …

Скобки ( ), символ группировки …

Звездочка *, шаблон подстановки имён файлов и папок …

Знак вопроса ?, маска для поиска файлов по шаблону имени …

Прямой слеш /, указатель опций команд …

Двойная кавычка «, указатель начала и конца строки … Кавычки — также пытаются, в меру сил — подавлять специальные операторы внутри обозначенной текстовой строки … Помните про её недостаточность, в случае с амперсандом SET «a=^&» … Также, подмечено, что если ECHO, вместо ответа — указывает свой статус (режим Эха включен), то заключение выражения в кавычки — лишь подтвердит, что указанной команды, исполняемого файла или сценария — не существует ))) … Плохая команда, можно сказать ))) …

Сами себя экранируют …

% экранирует %, и по мере возможности пытается экранировать некоторые управляющие символы, не разделённые пробелом …

! экранирует ! переменные в режиме SETLOCAL локального включения расширений функциональности команд интерпретатора CMD и разрешение отложенного раскрытия переменных … Отложенное (ленивое) раскрытие переменных EnableDelayedExpansion означает, что переменные будут раскрываться — не в момент выполнения команды, а в момент ее переопределения — в текущий момент времени…

И, уже известный ^ экранирует ^ …

Также отмечается, что если в переменную нужно внести значение с первым знаком равно =TestValue, то оно должно экранироваться нижним подчёркиванием, что вообще — совершенно неочевидно ))) … _=TestValue … По этой же причине — категорически не рекомендуется называть имена переменных — начиная с символа _ нижнего подчёркивания …

Раздел computer : список всех страниц …

Содержание

  • 1 Пробелы в значениях переменных
  • 2 Разрыв строки текста, перенос строки команд
  • 3 Экранирование служебных спецсимволов

Пробелы в значениях переменных

С переменной, в значении которой есть один или несколько пробелов, можно работать как и обычно..

Set PathBase=c:\Program Files\Firefox
Set StartProcess=%PathBase%\Firefox.exe

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

Set PathBase=c:\Program Files\Firefox
echo "%PathBase%\profiles.ini"

Но в некоторых случаях и тот и тот вариант может не подойти, тогда уж наверняка вас выручит иной вариант с кавычками, мой любимый

Set "PathBase=c:\Program Files\Firefox"
echo %PathBase%\profiles.ini

Разрыв строки текста, перенос строки команд

Если текст вашей команды слишком длинный, то это делает сценарий менее наглядным и удобочитаемым. Символ ^ должен быть последним в строке и означает, что следующая строка является продолжением текущей. Возможно разбиение команд более, чем на две строки. Заметим, при печати в консоли на выходе будет все же одна строка. Данный способ применяется только для более удобного восприятия и форматирования длинного кода листинга.

echo ^
Этот способ работает^
не только для текста^
но и для команд

Если нужно сделать перенос печатаемого текста в самой консоли, то просто используется новая команда с новой строки echo ваш текст.
Если нужна пустая строка на выходе, то используйте команду echo с точкой, то есть echo. в консоли выведет пустую строку.

Экранирование служебных спецсимволов

В командном языке Windows существует некоторый набор символов с высоким приоритетом, которые всегда трактуются как спецсимволы. К ним, в частности, относятся:

  • Операторы перенаправления ввода-вывода <, >, >>.
  • Оператор конвейера |.
  • Операторы объединения команд ||, & и &&.
  • Оператор разыменования переменной %…%.

В случае со знаком процента решение довольно хорошо известно и состоит в удвоении этого символа. Для других символов тут нам и придет на помощь уже известный знак домика — символ ^.

:: Это не сработает, вызовет ошибку - > was unexpected at this time.
echo <html>

:: А это сработает
echo ^<html^>

Этим же символом домика можно экранировать и любой другой символ, включая самого себя.

Продолжение следует..

Command-line environments like the Windows Command Prompt and PowerShell use spaces to separate commands and arguments—but file and folder names can also contain spaces. To specify a file path with a space inside it, you’ll need to “escape” it.

Command Line 101: Why You Have to Escape Spaces

“Escaping” a character changes its meaning. For example, escaping a space will cause the shell to treat it like a standard space character rather than a special character that separates command-line arguments.

For example, let’s say you have a text file that you want to see the contents of. You can do that with the type command. Assuming the text file is at C:\Test\File.txt, the following command in Command Prompt will show its contents:

Great. Now, what if you have the same file at C:\Test Folder\Test File.txt? If you try running the below command, it won’t work—those spaces in the file path are getting in the way.

type C:\Test Folder\Test File.txt

The command line thinks you’re trying to look for a file called C:\Test and says it “cannot find the path specified.”

Three Ways to Escape Spaces on Windows

There are three different ways you can escape file paths on Windows:

  • By enclosing the path (or parts of it) in double quotation marks ( ” ).

  • By adding a caret character ( ^ ) before each space. (This only works in Command Prompt/CMD, and it doesn’t seem to work with every command.)

  • By adding a grave accent character ( ` ) before each space. (This only works in PowerShell, but it always works.)

We’ll show you how to use each method.

Enclose the Path in Quotation Marks ( ” )

The standard way to ensure Windows treats a file path properly is to enclose it in double quotation mark ( ” ) characters. For example, with our sample command above, we’d just run the following instead:

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

You can actually enclose parts of the path in quotation marks if you prefer. For example, let’s say you had a file named File.txt in that folder. You could run the following:

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

However, that isn’t necessary—in most cases, you can just use quotation marks around the whole path.

This solution works both in the traditional Command Prompt (CMD) environment and in Windows PowerShell.

Sometimes: Use the Caret Character to Escape Spaces ( ^ )

In the Command Prompt, the caret character ( ^ ) will let you escape spaces—in theory. Just add it before each space in the file name. (You’ll find this character in the number row on your keyboard. To type the caret character, press Shift+6.)

Here’s the problem: While this should work, and it does sometimes, it doesn’t work all the time. The Command Prompt’s handling of this character is strange.

For example, with our sample command, you’d run the following, and it wouldn’t work:

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

On the other hand, if we try opening our file directly by typing its path into the Command Prompt, we can see that the caret character escapes the spaces properly:

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

So when does it work? Well, based on our research, it seems to work with some applications and not others. Your mileage may vary depending on the command you’re using. The Command Prompt’s handling of this character is strange. Give it a try with whatever command you’re using, if you’re interested—it may or may not work.

For consistency, we recommend you stick with double quotes in the Command Prompt—or switch to PowerShell and use the grave accent method below.

PowerShell: Use the Grave Accent Character ( ` )

PowerShell uses the grave accent ( ` ) character as its escape character. Just add it before each space in the file name. (You’ll find this character above the Tab key and below the Esc key on your keyboard.)

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

Each grave accent character tells PowerShell to escape the following character.

Note that this only works in the PowerShell environment. You’ll have to use the caret character in Command Prompt.

If you’re familiar with UNIX-like operating systems like Linux and macOS, you might be used to using the backslash ( \ ) character before a space to escape it. Windows uses this for normal file paths, so it doesn’t work—-the caret ( ^ ) and grave accent ( ` ) characters are the Windows version of backslash, depending on which command-line shell you’re using.

Source: how to geek

Как ввести путь к файлу или папке с пробелами в CMD Windows 10

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

Мы поделились множеством советов и приемов, которые включают запуск команд в командной строке в Windows 10. Многие общие действия, такие как проверка связи с сервером или проверка состояния сетевого коммутатора, выполняются с помощью командной строки.

Если вам неудобно использовать командную строку за пределами команд, которые уже записаны и выполняются в том виде, в каком они есть, вы, как правило, упускаете множество полезных вещей, которые можно сделать из командной строки. Один из довольно частых вопросов, возникающих у новых пользователей при использовании командной строки, заключается в том, как ввести имя или адрес папки или файла с пробелом в имени или пути.

Как ввести путь к файлу или папке с пробелами в CMD Windows 10

В общем, если вы пытаетесь выполнить команду, которая включает в себя указание пути к папке или файлу, а путь неверный, т. е. командная строка не может его увидеть, сообщение об ошибке не сообщит вам об этом.

Сообщение, которое возвращает командная строка, будет зависеть от команды, которую вы запустили, и будет больше похоже на то, что с командой что-то не так, а не на путь, затрудняющий решение проблемы. Исправление действительно простое.

Ввод путей с пробелами

Хитрость заключается в двойных кавычках. Сделайте эмпирическое правило заключать в двойные кавычки все пути к файлам, которые вы вводите в командной строке.

Следующая команда не будет выполняться. В пути есть пробел, и в этом месте команда прерывается, и командная строка считает, что вы ввели новую команду или параметр.

XCOPY C: тестовая папка UsersfatiwOneDriveDesktopMy D: / T / E

Эта команда будет работать. Единственное различие между ними заключается в том, что во втором пути путь указали в двойных кавычках.

XCOPY ‘C: UsersfatiwOneDriveDesktopMy папка теста’ D: / T / E

Даже если в вашем пути нет пробела, полезно заключить его в двойные кавычки и разработать привычка делать это. Если вы забыли или имеете дело с более длинным путем, простую ошибку, подобную этой, может быть трудно обнаружить.

Это верно для всех приложений командной строки, которые вы используете в Windows 10. В PowerShell — любая команда, которая требует, чтобы путь к файлу или папке вводился в двойных кавычках.

Если в пути нет пробела, у вас все будет хорошо, но если это произойдет, команда больше не будет запускаться, речь идет о выработке привычки, которая поможет вам избежать проблем в будущем.

Источник

Пробел в командной строке windows

Замыкающие пробелы в bat / cmd файлах.

Если значение переменной должно содержать один или более замыкающих пробелов — используйте для этого следующий прием:

(Окаймляющий знак # используется тут при выводе значения для того, что бы стало видно наличие замыкающего пробела в значении переменной )
С другой стороны, если в предыдущем примере не использовать кавычек, то результат будет тот же.
Вот и возникает соблазн написать в короткой форме.
Но это — плохой стиль. Главное — отсутствие наглядности.
Человек, который будет читать ваш код, вынужден будет потратить массу времени, что бы обнаружить это. Да и вы сами через некоторое время с трудом вспомните.

Но есть еще аспект — когда этот пробел появился там не по вашему желанию.
Например, вы скопировали участок кода с сайта, или при редактировании значения остался пробел, который вы не видите.
А теперь представьте, что значение такой переменной используется (как это однажды было в моей практике) при формировании имени архивного файла или списка аргументов, передаваемых внешней программе.

Искаженное значение переменной может доставить массу хлопот. Поэтому возьмите себе за правило — перед сохранением bat файла удалять в нем замыкающие пробелы.
Например, в редакторе Notepad++ для этого есть специальная функция — Правка — Операции с пробелами — Убрать Замыкающие Пробелы.
Это сохранит вам нервы, время и пространство на диске )).

Пробелы в значениях переменных.

Если переменной необходимо присвоить значение пробела, то можно использовать тот же прием, который использовался в начале этой страницы

С переменной, в значении которой есть один или несколько пробелов, можно работать как и обычно

В тех случаях, когда по синтаксису пробел не должен находиться в этом месте, используют окаймляющие кавычки

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).

Источник

Пробел в командной строке windows

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows shell run program
  • Как найти установочный файл программы на компьютере windows 10
  • Zapis ekran dlya windows skachat
  • Partition magic для windows server
  • Как изменить профиль сети на частную windows 10