Оболочки командной строки, такие как командная строка Windows и PowerShell, используют пробелы для разделения команд и аргументов, но имена файлов и папок также могут содержать пробелы поэтому просто так их использовать пробелы нельзя. Давайте разберемся…
Почему стоит избегать использование пробелов при работе в коммандной строке
Пробел в пути папки или файла командная строка определяет как разделение команд и аргументов. Для того, чтобы использовать пробел как собственно пробел, прийдется весь пусть экранировать, а это требует отдельного внимания в зависимости от конкретной оболочки командной строки и программы, выполняемой в этой оболочке.
Кратко опишем проблему: например, у нас есть текстовый файл, который необходимо прочесть. Предположим этот файл расположен по адресу C:TempTestFile.txt Для его прочтения необходимо выполнить команду
type C:TempTestFile.txt
Отлично, а теперь представим, что прочесть теперь необходимо файл по адресу C:Temp FolderTest File.txt
Выполнив команду ниже вы со 100% вероятностью получите не вывод содержимого файла на экран, а ошибку — пробелы в пути файла не дадут команде выполниться корректно.
type C:Temp FolderTest File.txt
Три способа использовать знак пробела в пути Windows
Существует три способа использовать пробел в пути файлов:
- Заключить путь c пробелами в двойные кавычки ( » )
- Добавлять символ каре ( ^ ) перед каждый пробелом (работает только в командной строке CMD и только в определенных командах и программах)
- Добавлять знак ударения ( ` ) перед каждым пробелом (работает только в PowerShell, но работает всегда)
Рассмотрим каждый способ ближе.
Заключить путь в двойные кавычки
Стандартный метод точного указания пути к файлу в Windows — заключение его в двойные кавычки. Например, команда выдававшая ошибку в примере выше с кавычками в пути будет выглядеть так:
type "C:Temp FolderTest File.txt"
Так же, вы можете заключить лишь часть пути в двойные кавычки, например только ту часть, которая содержит в себе пробелы.
Представим, что в папке Temp Folder у нас находится файл TestFile.txt, в таком случае команда будет выглядеть так:
type "C:Temp Folder"TestFile.txt
Но, на практике такие кавычки использовать не лучшая мысль — это запутывает код и делает его менее гибким. Гораздо проще просто закрыть весь путь двойными кавычками.
Это решение работает как в традиционной среде командной строки (CMD), так и в Windows PowerShell.
Добавить символ каре с пробелами в командной строке
Теоретически символ каре в командной строке позволит вам пользоваться пробелами в пути файлов. Нужно просто добавлять символ перед каждым пробелом (Shift + 6 в английской раскладке).
На практике этот спецсимвол работает не каждый раз и очень часто программа завершается ошибкой.
Например, следующая команда должна выполниться без проблем, но она почему-то выдает ошибку
type C:Temp^ FolderTest^ File.txt
С другой стороны, если мы попробуем окрыть наш файл напрямую, введя его путь в командной строке и проставив символы каре, то увидим, что пробелы в пути файла обработались корректно:
C:Temp^ FolderTest^ File.txt
Таким образом, по своему опыту и поискав информацию в интернете мы приходим к выводу, что этот способ работает только с избранными программами и не дает полной уверенности в результате.
Вывод — пользуйтесь двойными кавычками в командной строке, или символом ударения в PowerShell, о котором ниже.
PowerShell символ ударения с пробелами в командной строке
PowerShell использует символ ударения в качестве экранирующего символа. Его нужно добавлять с каждым пробелом в имени файла (Этот символ спрятан на букве Ё на клавиатуре).
type C:Temp` FolderTest` File.txt
Каждый символ ударения указывает PowerShell как обрабатывать каждый последующий пробел.
Обратите внимание, что этот способ работает только в среде PowerShell, в командной строке придется использовать символ каретки, или, как уже писали выше, экранировать весь путь двойными кавычками.
Для пользователей UNIX-подобных систем напомним, что аналогичная проблема с пробелами в командной строке в Linux и MacOS решается использованием символа обратной косой черты ( ).
Spaces in the Commend Prompt (in a VBA Shell command code line)
I had a very similar problem which ended up being a space in the command prompt when automating via VBA to get the contents from the command window into a text file. This Thread was one of many I caught along the way that didn’t quite get me the solution.
So this may help others with a similar problem: Since the syntax with quotes is always difficult to get right , I think showing some specific examples is always useful.
The additional problem you get using the command prompt in VBA via the Shell thing, is that the code line often won’t error when something goes wrong: in fact a blink of the black commend window misleads into thinking something was done.
As example… say I have a Folder, with a text file in it like at
C:Alans Foldertest1.txt ( https://imgur.com/FELSdB6 )
The space there in the folder name gives the problem.
Something like this would work, assuming the Folder, AlansFolder, exists
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:AlansFoldertest1.txt"""
End Sub
This won’t work. (It won’t error).
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:Alans Foldertest1.txt"""
End Sub
Including quote pairs around the path will make it work
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > ""C:Alans Foldertest1.txt"""""
End Sub
( By the way, if the text file does not exist, then it will be made).
With the benefit of hindsight, we can see that my solution does tie up approximately with some already given..
Converting that code line to a manual given command we would have
ipconfig /all > "C:Alans Foldertest1.txt"
That seems to work
This works also
ipconfig /all > C:AlansFoldertest1.txt
This doesn’t
ipconfig /all > C:Alans Foldertest1.txt
This final form also works and ties up with the solution from sacra ….” You have to add quotation marks around each path and also enclose the whole command in quotation marks “ …..
cmd.exe /c "ipconfig /all > "C:Alans Foldertest1.txt""
Spaces in the Commend Prompt (in a VBA Shell command code line)
I had a very similar problem which ended up being a space in the command prompt when automating via VBA to get the contents from the command window into a text file. This Thread was one of many I caught along the way that didn’t quite get me the solution.
So this may help others with a similar problem: Since the syntax with quotes is always difficult to get right , I think showing some specific examples is always useful.
The additional problem you get using the command prompt in VBA via the Shell thing, is that the code line often won’t error when something goes wrong: in fact a blink of the black commend window misleads into thinking something was done.
As example… say I have a Folder, with a text file in it like at
C:Alans Foldertest1.txt ( https://imgur.com/FELSdB6 )
The space there in the folder name gives the problem.
Something like this would work, assuming the Folder, AlansFolder, exists
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:AlansFoldertest1.txt"""
End Sub
This won’t work. (It won’t error).
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:Alans Foldertest1.txt"""
End Sub
Including quote pairs around the path will make it work
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > ""C:Alans Foldertest1.txt"""""
End Sub
( By the way, if the text file does not exist, then it will be made).
With the benefit of hindsight, we can see that my solution does tie up approximately with some already given..
Converting that code line to a manual given command we would have
ipconfig /all > "C:Alans Foldertest1.txt"
That seems to work
This works also
ipconfig /all > C:AlansFoldertest1.txt
This doesn’t
ipconfig /all > C:Alans Foldertest1.txt
This final form also works and ties up with the solution from sacra ….” You have to add quotation marks around each path and also enclose the whole command in quotation marks “ …..
cmd.exe /c "ipconfig /all > "C:Alans Foldertest1.txt""
Мы делимся множеством советов и приемов, связанных с запуском команд в командной строке в Windows 10. Многие обычные вещи, такие как проверка связи с сервером или проверка состояния вашего сетевого коммутатора, выполняются с помощью командной строки. Если вам неудобно использовать командную строку помимо команд, которые уже написаны и должны выполняться как есть, вы, как правило, упускаете множество полезных вещей, которые можно сделать из командной строки. Один довольно частый вопрос, который возникают у новых пользователей при использовании командной строки, — как ввести имя или адрес папки или файла, в имени или пути которого есть пробел.
Вообще говоря, если вы пытаетесь запустить команду, которая включает в себя указание пути к папке или файлу, и путь неверен, то есть командная строка не может его увидеть, сообщение об ошибке не скажет вам этого. Сообщение, которое возвращает командная строка, будет зависеть от запущенной вами команды, и будет казаться, что что-то не так с командой, а не с путем, затрудняющим устранение проблемы. Исправить очень просто.
Ввод путей с пробелами
Уловка заключается в двойных кавычках. Возьмите за правило заключать все пути к файлам, которые вы вводите в командной строке, в двойные кавычки.
Следующая команда не будет запущена. В пути есть пробел, и в этом месте команда прерывается, и командная строка думает, что вы ввели новую команду или параметр.
XCOPY C:UsersfatiwOneDriveDesktopMy test Folder D: /T /E
Эта команда будет работать. Единственная разница между ними заключается в том, что во втором пути путь заключен в двойные кавычки.
XCOPY "C:UsersfatiwOneDriveDesktopMy test Folder" D: /T /E
Даже если на вашем пути нет места, рекомендуется заключить его в двойные кавычки и выработать привычку делать это. Если вы забудете или столкнетесь с более длинным путем, такую простую ошибку будет сложно обнаружить.
Это справедливо для всех приложений командной строки, которые вы используете в Windows 10. В PowerShell любую команду, требующую ввода пути к файлу или папке, следует заключать в двойные кавычки. Если в пути нет места, все будет в порядке, но если оно есть, команда больше не будет запускаться, это о выработке привычки, чтобы избавить себя от проблем позже.
Что вы думаете об этой статье?
На чтение 11 мин. Просмотров 102 Опубликовано 03.02.2021
Как использовать пробелы в командной строке Windows?
cmd/CC: Program Files (x86) WinRar Rar.exe a D: Hello 2 File.rar D: Hello 2 *. *
В этом случае одинарные кавычки не подходят. Вы должны добавить кавычки вокруг каждого пути, а также заключить всю команду в кавычки:
cmd/C "" C: Program Files (x86) WinRar Rar .exe "a" D: Hello 2 File.rar "" D: Hello 2 *. * ""
Я только что понял, что для случая, когда путь включает использование символов пробела, например, когда мне нужно доступ к приложению xyz
, расположение которого:
C: Program Files ab cd xyz.exe
Чтобы запустить это из командной строки Windows, вам необходимо использовать
C: "Program Files" "ab cd" xyz.exe
или
"C: Program Files ab cd xyz.exe"
Поделиться
Улучшить этот ответ
12 июня ’18 в 15: 1 6
ghbarratt
10.6k44 золотых знака3737 серебряных знаков4141 бронзовых знаков
ответил 8 ноября 2013 в 13:16
-
Я пробовал это, но, похоже, в моем случае не работает: python “” C: Program Files (x86) Jenkins workspace Модульный тест Map Checker sqs-poller node_modules map-checker python unit_test.py “-d” C: Program Files (x86) Jenkins workspace Map Checker Unit Test MAP_CHECK_TMP #Test Case “-o” C: Program Files (x86) Jenkins workspace Модульный тест Map Checker MAP_CHECK_TMP #Test Case “-o2” C: Program Files (x86) Jenkins workspace Модульный тест Map Checker MAP_CHECK_TMP #Test Case testcase_results.csv “” -l “C: Program Files (x86) Jenkins workspace Модуль проверки карты MAP_CHECK_TMP” -restore “. может помочь? – hafizan 07 июл.2020, в 9:04
добавить комментарий |
Я только что понял, что для случая, когда путь включает использование символов пробела, например, когда мне нужно получить доступ к app xyz
, расположение:
C: Program Files ab cd xyz.exe
Чтобы запустить это из командной строки Windows, вам необходимо использовать
C: "Program Files" "ab cd" xyz.exe
или
"C: Program Files ab cd xyz. exe "
Если двойные кавычки не решают проблему, тогда попробуйте, например,
dir/X ~ 1 c:
, чтобы получить список альтернативные имена файлов или каталогов. Пример вывода:
11.09.2014 12:54 AM 8,065 DEFAUL ~ 1.XML Default Desktop Policy.xml06/12/2014 03:49 PM Программные файлы PROGRA ~ 1 10/12/2014 12:46 AM Программные файлы PROGRA ~ 2 (x86)
Теперь используйте короткий 8-символьный файл или имя папки в 5-м столбце, например PROGRA ~ 1 или DEFAUL ~ 1.XML, в ваших командах. Например:
установите JAVA_HOME = c: PROGRA ~ 1 Java jdk1.6.0_45
Поделиться
Улучшите этот ответ
отредактировано 27 июля ’18 в 15:50
jtth 73699 серебряных знаков2727 бронзовых знаков
-
Это простой способ. Никакой гадости с двойными кавычками. – Дэйв Андерсон, 25 февраля 2015, 20:34
-
Знаете ли вы, что short 8.3 является опцией NTFS и может быть отключен? Не надейтесь на это. – Зан Линкс 28 мая ’19 в 2:26
добавить комментарий |
Если двойные кавычки не решают проблему, попробуйте, например,
dir/X ~ 1 c:
, чтобы получить список альтернативных имен файлов или каталогов. Пример вывода:
09.11.2014 00:54 8065 DEFAUL ~ 1.XML Default Desktop Policy.xml06/12/2014 15:49 PM PROGRA ~ 1 Program Files 10/12/2014 12:46 AM PROGRA ~ 2 Program Files (x86)
Теперь используйте короткое 8-символьное имя файла или папки в 5-м столбце , например PROGRA ~ 1 или DEFAUL ~ 1.XML в ваших командах. Например:
установите JAVA_HOME = c: PROGRA ~ 1 Java jdk1.6.0_45
Заключите пути, содержащие пробелы, в двойные кавычки.
cmd/C "C: Program Files (x86) WinRar Rar.exe" a "D: Hello 2 File.rar" "D: Hello 2 *. * "
Поделиться
Улучшите этот ответ
ответил 16 июня ’11 в 17:34
-
Тогда проблема заключается в том, каков на самом деле синтаксис аргументов
Rar.exe
. Возможно, вы его неправильно используете. Попробуйте"D: Hello 2 "
или" D: Hello 2 "
вместо" D: Hello 2 *. * "
? – JAB 16 июня ’11 в 18:09 -
cmd/C “C: Program Files (x86) WinRar Rar.exe” a D: Hello File.rar D: Hello *. * (Это не есть пробелы, и это работает), но как бороться с пробелами? – faressoft 16 июня 2011 г., 18:29
-
@JAB, если вам нужно исключить f Файл имеет имя с пробелами, например
CEEMEA & LATAM.doc
. Что это должно быть?"C: Program Files WinRAR rar" a -x * CEEMEA & LATAM.doc ".rar"
– Ибн и Ашик, 29 августа 2017 г., 7:30
добавить комментарий |
Заключите пути, содержащие пробелы, в двойные кавычки.
cmd/C "C : Program Files (x86) WinRar Rar.exe "a" D: Hello 2 File.rar "" D: Hello 2 *. * "
Я предпочитаю заключать команду в ()
, который является допустимым batch
, что упрощает чтение:
cmd/C ("C: Program Files (x86 ) WinRar Rar.exe "a" D: Hello 2 File.rar "" D: Hello 2 *. * ")
Поделиться
Улучшить этот ответ
ответил 27 фев. 2016 в 01:10
Я предпочитаю заключать команду в ()
, что является допустимым пакетом
, который немного упрощает чтение:
cmd/C ("C: Program Files (x86) WinRar Rar.exe" a "D: Hello 2 File.rar "" D: Hello 2 *. * ")
Попробуйте указать сложные пути в двойных кавычках (и включить расширения файлов в конце для файлов.)
Для файлов:
вызов "C: example file". exe "
Для каталога:
cd" C: Users User Name New Folder "
CMD интерпретирует текст в двойных кавычках («xyz») как одну строку, а текст в одинарных кавычках (‘xyz’) как команду. Например:
FOR %% A in (‘dir/b/s * .txt’) do (‘command’)
FOR %% A in (‘dir/b/s * .txt ‘) do (echo “%% A”)
И одна хорошая вещь, cmd * не чувствителен к регистру, как bash. Итак, “New fiLE.txt” и “new file. TXT “похож на него.
* Примечание. Переменные %% A в приведенном выше регистре чувствительны к регистру (%% A не равно %% a).
Поделиться
Улучшить этот ответ
отредактировано 17 мая ’20 в 17 : 42
ответил 17 февраля ’16 в 21:01
-
Делайте подчеркивания в именах файлов считать? Как «имя_файла» против «имени файла» – SqueakyBeak 8 янв.2020 в 16:26
добавить комментарий |
Попробуйте указать сложные пути в двойных кавычках (и включить расширения файлов в конце для файлов.)
Для файлов:
вызовите «C: example file.exe»
Для каталога:
cd "C: Users User Name New Folder"
CMD интерпретирует текст в двойных кавычках (“xyz”) как одну строку и текст в одинарных кавычках (‘xyz’) в виде команды. Например:
FOR %% A in (‘dir/b/s * .txt’) do (‘ command ‘)
FOR %% A in (‘ dir/b/s * .txt ‘) do (echo “%% A”)
И хорошо, что cmd * не чувствителен к регистру, как bash. Так что «Новый файл .txt» и «новый файл.TXT» ему одинаковы.
* Примечание. Переменные %% A в приведенном выше регистре чувствительны к регистру (%% A не равно %% a).
set "CMD = C: Program Files (x86) PDFtk bin pdftk "echo cmd/K" "% CMD%"% D% output trimmed.pdf "start cmd/K" "% CMD%"% D% output trimmed.. pdf "
это сработало для меня в пакетном файле
Поделиться
Улучшить этот ответ
ответил 29 сен 2015, 17:55
set "CMD = C: Program Files (x86) PDFtk bin pdftk" echo cmd/K ""% CMD% "% D% вывод обрезан .pdf "start cmd/K" "% CMD%"% D% output trimmed.pdf "
это сработало для меня в пакетном файле
Просто добавьте кавычки
Пример: “C: Users User Name”
Надеюсь, он решен!
Поделиться
Улучшить этот ответ
ответил 25 мая ’19 в 17:35
-
То же самое уже было сказано полдюжины раз. Какую дополнительную ценность это добавляет? – JJJ 25 мая ’19 в 6:02
добавить комментарий |
Просто добавьте кавычки
Пример: “C: Users Имя пользователя “
Надеюсь, он решен!
Попробуйте использовать кавычки.
cmd/C "C: Program Files (x86) WinRar Rar.exe "a" D: Hello 2 File.rar "" D: Hello 2 *. * "
Поделиться
Улучшить этот ответ
ответил 16 июня ’11 в 17:36
-
Это ненадежно. В определенных случаях (см. Microsoft. com/resources/documentation/windows/xp/all/proddocs/… – обработка кавычек) вместо этого выполняется файл «C: Program.bat». – Micha Wiedenmann 8 сен. ’14 в 06:51
добавить комментарий |
Вам следует попробовать использовать кавычки.
cmd/C "C: Program Файлы (x86) WinRar Rar.exe "a" D: Hello 2 File.rar "" D: Hello 2 *. * "
Пробелы в приглашении к сообщению (в строке командного кода оболочки VBA)
У меня была очень похожая проблема, которая закончилась тем, что при автоматизации через VBA для получения содержимого из командного окна в текстовый файл был пробел в командной строке. Эта тема была одной из многих, которые я поймал по пути, которые не совсем помогли мне найти решение.
Таким образом, это может помочь другим с аналогичной проблемой: поскольку синтаксис с кавычками всегда трудно получить да, я думаю, что показ конкретных примеров всегда полезно. Дополнительная проблема, с которой вы сталкиваетесь при использовании командной строки в VBA через оболочку, заключается в том, что строка кода часто не дает ошибок, когда что-то идет не так: на самом деле, мигание черного окна приветствия вводит в заблуждение, заставляя думать, что что-то было сделано.
В качестве примера … скажем, у меня есть папка с текстовым файлом в ней, например, в
C: Alans Folder test1.txt (https://imgur .com/FELSdB6)
Пробел в имени папки вызывает проблему.
Что-то вроде этого могло бы работать, если папка AlansFolder существует
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent () Shell "cmd.exe/c" "ipconfig/all> C: AlansFolder test1.txt" "" End Sub
Это не сработает. (Ошибка не будет).
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent () Shell "cmd.exe/c" "ipconfig/all> C: Alans Folder test1.txt" " "End Sub
Включение пар кавычек вокруг пути заставит его работать
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent () Shell" cmd.exe/ c "" ipconfig/all> "" C: Alans Folder test1.txt "" "" "End Sub
(Кстати, если текстовый файл не существует , тогда это будет сделано).
Оглядываясь назад, мы можем увидеть, что мое решение приблизительно связано с некоторыми уже данными.
Преобразование этой строки кода в команду, заданную вручную, мы будет
ipconfig/all> "C: Alans Folder test1.txt"
Кажется, работает
Это также работает
ipconfig/all> C: AlansFolder test1.txt
Это не
ipconfig/all> C: Alans Folder test1.txt
Эта окончательная форма также работает и связывает вверх с решением от sacra …. ” Вы должны добавить кавычки вокруг каждого пути, а также заключить всю команду в кавычки «… ..
cmd.exe/ c "ipconfig/all>" C: Alans Folder test1.txt ""
Поделиться
Улучшить этот ответ
ответил 15 декабря ’19 в 17:42
Пробелы в приглашении с благодарностью (в строке командного кода оболочки VBA)
У меня была очень похожая проблема, которая в итоге оказалась пробелом в командной строке при автоматизации через VBA для получения содержимого из командного окна в текстовый файл. Эта тема была одной из многих, которые я поймал по пути, которые не совсем помогли мне найти решение.
Таким образом, это может помочь другим с аналогичной проблемой: поскольку синтаксис с кавычками всегда трудно получить да, я думаю, что показ конкретных примеров всегда полезно. Дополнительная проблема, с которой вы сталкиваетесь при использовании командной строки в VBA через оболочку, заключается в том, что строка кода часто не дает ошибок, когда что-то идет не так: на самом деле, мигание черного окна приветствия вводит в заблуждение, заставляя думать, что что-то было сделано.
В качестве примера … скажем, у меня есть папка с текстовым файлом в ней, например, в
C: Alans Folder test1.txt (https://imgur .com/FELSdB6)
Пробел в имени папки указывает на проблему.
Примерно так будет работать, если папка AlansFolder существует
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent () Shell "cmd.exe/c" "ipconfig /all> C: AlansFolder test1.txt "" "End Sub
Это не сработает. (Ошибка не будет).
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent () Shell "cmd.exe/c" "ipconfig/all> C: Alans Folder test1.txt" " "End Sub
Включение пар кавычек вокруг пути заставит его работать
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent () Shell" cmd.exe/ c "" ipconfig/all> "" C: Alans Folder test1.txt "" "" "End Sub
(Кстати, если текстовый файл не существует , тогда это будет сделано).
Оглядываясь назад, мы можем увидеть, что мое решение приблизительно связано с некоторыми уже данными.
Преобразование этой строки кода в команду, заданную вручную, мы будет
ipconfig/all> "C: Alans Folder test1.txt"
Кажется, работает
Это также работает
ipconfig/all> C: AlansFolder test1.txt
Это не
ipconfig/all> C: Alans Folder test1.txt
Эта окончательная форма также работает и связывает с решением от sacra… » Вы должны добавить кавычки вокруг каждого пути, а также заключить всю команду в кавычки «… ..
cmd.exe/c "ipconfig/all>" C: Alans Folder test1.txt ""
Эту проблему можно решить с помощью команды cd , эта команда понимает пробелы без двойных кавычек, и вы можете вызывать любую программу таким образом, например :
C: Windows system32> cd c: Program Files MongoDB Server 3.2 bin
c: Program Files MongoDB Server 3.2 bin> вызов командной строки mongonow mongo.exe
Поделиться
Улучшите этот ответ
ответил 17 марта ’16 в 13:24
Эту проблему можно решить с помощью команды cd , эта команда распознает пробелы без двойных кавычек, и вы можете вызовите любую программу таким образом, например:
C: Windows system32> cd c: Program Files MongoDB Server 3.2 bin
c: Program Files MongoDB Server 3.2 bin> вызов командной строки mongonow mongo.exe
В средах командной строки, таких как командная строка Windows и PowerShell, пробелы используются для разделения команд и аргументов, но имена файлов и папок также могут содержать пробелы. Чтобы указать путь к файлу имеющего символ пробела в названии или пути к файлу, вам нужно «экранировать» его.
Почему нужно избегать символ пробела?
«Пробел» в названии файла или папки, может препятствовать правильной обработке команды, экранирование пробела заставит оболочку рассматривать его как стандартный пробел, а не как специальный символ, разделяющий аргументы командной строки.
Например, предположим, что у вас есть текстовый файл, содержимое которого вы хотите просмотреть. Вы можете сделать это с помощью команды type. Предполагая, что текстовый файл находится по адресу C:ПапкаFile.txt, следующая команда в командной строке покажет содержимое файла:
Отлично! А что, если у вас есть такой же файл по адресу C:Новая папкаFile.txt? Если вы попробуете выполнить приведенную ниже команду, это не сработает — пробелы в пути к файлу мешают правильно обработать команду.
type C:Новая папкаFile.txt
Командная строка считает, что вы пытаетесь найти файл с именем Новая, в результате вы получаете: «Ошибка во время обработки: C:Новая.
Системе не удается найти указанный путь.». Тоже самое будет? если пробел есть в имени файла New File.txt
Три способа избежать ошибок из-за символа пробел в Windows 10
Есть три разных способа избежать проблем используя пробел в пути к файлу Windows:
- Заключив путь (или его части) в двойные кавычки (”).
- Добавляя символ вставки (^) перед каждым пробелом. (Это работает только в командной строке / CMD.)
- Добавляя знак ударения (`) перед каждым пробелом. (Это работает только в 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. В командной строке вам нужно будет использовать символ каретки.
Если вы знакомы с UNIX-подобными операционными системами, такими как Linux и macOS, вы, возможно, привыкли использовать символ обратной косой черты () перед пробелом, чтобы правильно обработать команду. Windows использует его для пути к файлам, поэтому он не работает — символы каретки (^) и ударения (`) это своего рода обратная косая черта Windows в зависимости от того, какую оболочку вы используете.
Как использовать пробелы в командной строке?
Как я могу использовать пробелы в командной строке Windows?
В этом случае одинарные кавычки не подходят. Вы должны добавить кавычки вокруг каждого пути, а также заключить всю команду в кавычки:
Я только что выяснил, что для случая, когда путь включает использование символов пробела, например, когда мне нужно получить доступ к приложению, xyz расположение которого:
Чтобы запустить это из командной строки Windows, вам нужно использовать
Если двойные кавычки не решают проблему, попробуйте, например,
получить список альтернативных имен файлов или каталогов. Пример вывода:
Теперь используйте короткие 8-символьные имена файлов или папок в 5-м столбце, например, PROGRA
1.XML, в своих командах. Например:
Обведите пути, содержащие пробелы, двойными кавычками.
Попробуйте указать сложные имена путей в двойных кавычках (и в конце добавить расширения файлов).
CMD интерпретирует текст с двойными кавычками («xyz») как одну строку, а текст внутри одинарных кавычек («xyz») — как команду. Например:
FOR %% A in (‘dir / b / s * .txt’) do (‘команда’)
FOR %% A in (‘dir / b / s * .txt’) do (вывод «%% A»)
И еще одна хорошая вещь, cmd не * чувствителен к регистру, как Bash. Так что «New fiLE.txt» и «new file.TXT» похожи на это.
* Примечание: переменные %% A в приведенном выше регистре чувствительны к регистру (%% A не равно %% a).
Я предпочитаю заключить команду, в () которой действует, batch что делает его немного легче читать:
это работало для меня в командном файле
Просто добавьте кавычку
Пример: «C: Users Имя пользователя»
Надеюсь, это решено!
Вы должны попробовать использовать кавычки.
Пробелы в командной строке (в командной строке оболочки VBA)
У меня была очень похожая проблема, которая в итоге приводила к пробелу в командной строке при автоматизации через VBA для получения содержимого из командного окна в текстовый файл. Эта тема была одной из многих, которые я нашел на этом пути, но это не совсем помогло мне найти решение.
Так что это может помочь другим с подобной проблемой: так как синтаксис с кавычками всегда трудно понять правильно, я думаю, что показ некоторых конкретных примеров всегда полезен. Дополнительная проблема, возникающая при использовании командной строки в VBA через оболочку, заключается в том, что строка кода часто не выдает ошибку, если что-то идет не так: на самом деле миг черного окна commend вводит в заблуждение, заставляя думать, что что-то было сделано.
Как пример . скажем, у меня есть папка с текстовым файлом в нем, как в
Пробел в имени папки дает проблему.
Нечто подобное будет работать, если предположить, что папка AlansFolder существует
Это не сработает. (Это не ошибка).
Включение пар цитат вокруг пути заставит его работать
(Кстати, если текстового файла не существует, то это будет сделано).
Оглядываясь назад, мы видим, что мое решение связано примерно с некоторыми уже предоставленными ..
Преобразование этой строки кода в заданную вручную команду мы бы
Это похоже на работу
Это работает также
Эта окончательная форма также работает и связана с решением от сакры… » Вы должны добавить кавычки вокруг каждого пути, а также заключить всю команду в кавычки «… ..
Пробелы в пути файлов командной строки Windows, как их использовать?
Оболочки командной строки, такие как командная строка Windows и PowerShell, используют пробелы для разделения команд и аргументов, но имена файлов и папок также могут содержать пробелы поэтому просто так их использовать пробелы нельзя. Давайте разберемся…
Почему стоит избегать использование пробелов при работе в коммандной строке
Пробел в пути папки или файла командная строка определяет как разделение команд и аргументов. Для того, чтобы использовать пробел как собственно пробел, прийдется весь пусть экранировать, а это требует отдельного внимания в зависимости от конкретной оболочки командной строки и программы, выполняемой в этой оболочке.
Кратко опишем проблему: например, у нас есть текстовый файл, который необходимо прочесть. Предположим этот файл расположен по адресу C:TempTestFile.txt Для его прочтения необходимо выполнить команду
Отлично, а теперь представим, что прочесть теперь необходимо файл по адресу C:Temp FolderTest File.txt
Выполнив команду ниже вы со 100% вероятностью получите не вывод содержимого файла на экран, а ошибку — пробелы в пути файла не дадут команде выполниться корректно.
Три способа использовать знак пробела в пути Windows
Существует три способа использовать пробел в пути файлов:
- Заключить путь c пробелами в двойные кавычки ( » )
- Добавлять символ каре ( ^ ) перед каждый пробелом (работает только в командной строке CMD и только в определенных командах и программах)
- Добавлять знак ударения ( ` ) перед каждым пробелом (работает только в PowerShell, но работает всегда)
Рассмотрим каждый способ ближе.
Заключить путь в двойные кавычки
Стандартный метод точного указания пути к файлу в Windows — заключение его в двойные кавычки. Например, команда выдававшая ошибку в примере выше с кавычками в пути будет выглядеть так:
Так же, вы можете заключить лишь часть пути в двойные кавычки, например только ту часть, которая содержит в себе пробелы.
Представим, что в папке Temp Folder у нас находится файл TestFile.txt, в таком случае команда будет выглядеть так:
Но, на практике такие кавычки использовать не лучшая мысль — это запутывает код и делает его менее гибким. Гораздо проще просто закрыть весь путь двойными кавычками.
Это решение работает как в традиционной среде командной строки (CMD), так и в Windows PowerShell.
Добавить символ каре с пробелами в командной строке
Теоретически символ каре в командной строке позволит вам пользоваться пробелами в пути файлов. Нужно просто добавлять символ перед каждым пробелом (Shift + 6 в английской раскладке).
На практике этот спецсимвол работает не каждый раз и очень часто программа завершается ошибкой.
Например, следующая команда должна выполниться без проблем, но она почему-то выдает ошибку
С другой стороны, если мы попробуем окрыть наш файл напрямую, введя его путь в командной строке и проставив символы каре, то увидим, что пробелы в пути файла обработались корректно:
Таким образом, по своему опыту и поискав информацию в интернете мы приходим к выводу, что этот способ работает только с избранными программами и не дает полной уверенности в результате.
Вывод — пользуйтесь двойными кавычками в командной строке, или символом ударения в PowerShell, о котором ниже.
PowerShell символ ударения с пробелами в командной строке
PowerShell использует символ ударения в качестве экранирующего символа. Его нужно добавлять с каждым пробелом в имени файла (Этот символ спрятан на букве Ё на клавиатуре).
Каждый символ ударения указывает PowerShell как обрабатывать каждый последующий пробел.
Обратите внимание, что этот способ работает только в среде PowerShell, в командной строке придется использовать символ каретки, или, как уже писали выше, экранировать весь путь двойными кавычками.
Для пользователей UNIX-подобных систем напомним, что аналогичная проблема с пробелами в командной строке в Linux и MacOS решается использованием символа обратной косой черты ( ).
Как вводить пути к файлам или папкам с пробелами в командной строке в Windows 10
Мы делимся множеством советов и приемов, связанных с запуском команд в командной строке в Windows 10. Многие обычные вещи, такие как проверка связи с сервером или проверка состояния вашего сетевого коммутатора, выполняются с помощью командной строки. Если вам неудобно использовать командную строку помимо команд, которые уже написаны и должны выполняться как есть, вы, как правило, упускаете множество полезных вещей, которые можно сделать из командной строки. Один довольно частый вопрос, который возникают у новых пользователей при использовании командной строки, — как ввести имя или адрес папки или файла, в имени или пути которого есть пробел.
Вообще говоря, если вы пытаетесь запустить команду, которая включает в себя указание пути к папке или файлу, и путь неверен, то есть командная строка не может его увидеть, сообщение об ошибке не скажет вам этого. Сообщение, которое возвращает командная строка, будет зависеть от запущенной вами команды, и будет казаться, что что-то не так с командой, а не с путем, затрудняющим устранение проблемы. Исправить очень просто.
Ввод путей с пробелами
Уловка заключается в двойных кавычках. Возьмите за правило заключать все пути к файлам, которые вы вводите в командной строке, в двойные кавычки.
Следующая команда не будет запущена. В пути есть пробел, и в этом месте команда прерывается, и командная строка думает, что вы ввели новую команду или параметр.
Эта команда будет работать. Единственная разница между ними заключается в том, что во втором пути путь заключен в двойные кавычки.
Даже если на вашем пути нет места, рекомендуется заключить его в двойные кавычки и выработать привычку делать это. Если вы забудете или столкнетесь с более длинным путем, такую простую ошибку будет сложно обнаружить.
Это справедливо для всех приложений командной строки, которые вы используете в Windows 10. В PowerShell любую команду, требующую ввода пути к файлу или папке, следует заключать в двойные кавычки. Если в пути нет места, все будет в порядке, но если оно есть, команда больше не будет запускаться, это о выработке привычки, чтобы избавить себя от проблем позже.
Как ввести путь к файлу или папке с пробелами в командной строке в Windows 10
Мы поделились множеством советов и приемов, которые включают запуск команд в командной строке в Windows 10. Многие общие действия, такие как проверка связи с сервером или проверка состояния сетевого коммутатора, выполняются с помощью командной строки.
Если вам неудобно использовать командную строку за пределами команд, которые уже записаны и выполняются в том виде, в каком они есть, вы, как правило, упускаете множество полезных вещей, которые можно сделать из командной строки. Один из довольно частых вопросов, возникающих у новых пользователей при использовании командной строки, заключается в том, как ввести имя или адрес папки или файла с пробелом в имени или пути.
В общем, если вы пытаетесь выполнить команду, которая включает в себя указание пути к папке или файлу, а путь неверный, т. е. командная строка не может его увидеть, сообщение об ошибке не сообщит вам об этом.
Сообщение, которое возвращает командная строка, будет зависеть от команды, которую вы запустили, и будет больше похоже на то, что с командой что-то не так, а не на путь, затрудняющий решение проблемы. Исправление действительно простое.
Ввод путей с пробелами
Хитрость заключается в двойных кавычках. Сделайте эмпирическое правило заключать в двойные кавычки все пути к файлам, которые вы вводите в командной строке.
Следующая команда не будет выполняться. В пути есть пробел, и в этом месте команда прерывается, и командная строка считает, что вы ввели новую команду или параметр.
XCOPY C: тестовая папка UsersfatiwOneDriveDesktopMy D: / T / E
Эта команда будет работать. Единственное различие между ними заключается в том, что во втором пути путь указали в двойных кавычках.
XCOPY ‘C: UsersfatiwOneDriveDesktopMy папка теста’ D: / T / E
Даже если в вашем пути нет пробела, полезно заключить его в двойные кавычки и разработать привычка делать это. Если вы забыли или имеете дело с более длинным путем, простую ошибку, подобную этой, может быть трудно обнаружить.
Это верно для всех приложений командной строки, которые вы используете в Windows 10. В PowerShell — любая команда, которая требует, чтобы путь к файлу или папке вводился в двойных кавычках.
Если в пути нет пробела, у вас все будет хорошо, но если это произойдет, команда больше не будет запускаться, речь идет о выработке привычки, которая поможет вам избежать проблем в будущем.
Как ввести путь к файлу или папке с пробелами в CMD Windows 10
Просмотров сегодня: 3 773
Пробелы в приглашении к одобрению (в строке командного кода оболочки VBA)
У меня была очень похожая проблема, которая в конечном итоге оказалась пробелом в командной строке при автоматизации через VBA для получения содержимого из командного окна в текстовый файл. Эта тема была одной из многих, которые я поймал по пути, и которые не совсем помогли мне найти решение.
Таким образом, это может помочь другим решить аналогичную проблему: поскольку синтаксис с кавычками всегда сложно понять, я думаю, что показ некоторых конкретных примеров всегда полезно. Дополнительная проблема, с которой вы сталкиваетесь при использовании командной строки в VBA через оболочку, заключается в том, что строка кода часто не вызывает ошибок, когда что-то идет не так: на самом деле, мигание черного окна приветствия вводит в заблуждение, заставляя думать, что что-то было сделано.
В качестве примера … скажем, у меня есть папка с текстовым файлом, например, в
C: Папка Alans test1.txt ( https://imgur.com/FELSdB6 )
Пробел в названии папки дает проблему.
Что-то вроде этого будет работать, если папка AlansFolder существует.
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:AlansFoldertest1.txt"""
End Sub
Это не сработает. (Это не ошибка).
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:Alans Foldertest1.txt"""
End Sub
Включение пар цитат вокруг пути заставит его работать
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > ""C:Alans Foldertest1.txt"""""
End Sub
(Кстати, если текстового файла не существует, то он будет создан).
Оглядываясь назад, мы можем видеть, что мое решение действительно приблизительно связано с некоторыми уже данными.
Преобразуя эту строку кода в заданную вручную команду, мы получили бы
ipconfig /all > "C:Alans Foldertest1.txt"
Кажется, это работает
Это также работает
ipconfig /all > C:AlansFoldertest1.txt
Это не
ipconfig /all > C:Alans Foldertest1.txt
Эта окончательная форма также работает и связана с решением сакра… » Вы должны добавить кавычки вокруг каждого пути, а также заключить всю команду в кавычки. «… ..
cmd.exe /c "ipconfig /all > "C:Alans Foldertest1.txt""