Как использовать пробелы в командной строке?


192

Как я могу использовать пробелы в командной строке Windows?

cmd /C C:\Program Files (x86)\WinRar\Rar.exe a D:\Hello 2\File.rar D:\Hello 2\*.*

Ответы:


261

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

cmd /C ""C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*""

4
Да, каждый путь должен быть заключен в кавычки. Кроме того, вся команда должна была быть снова заключена в другую пару кавычек. Теперь это работает! Спасибо!
Встань

@sakra у меня тоже не работает. "" C: \ Program Files \ WinRAR \ WinRAR.exe "а "C: \ Вери Табани yedekler \ Dedicated_Pokemon_Pets_DB_Backup_2014_7_10_7_2.rar" -ri1 -mt2 -m5 "C: \ Вери Табани yedekler \ Dedicated_Pokemon_Pets_DB_Backup_2014_7_10_7_2.bak""
MonsterMMORPG

3
@MonsterMMORPG префикс строки сcmd /C
сакра

@sakra Я хочу исключить файл с именем с пробелами CEEMEA & LATAM.doc. Что я должен делать? "C:\Program Files\WinRAR\rar" a -agmmddyy -x*CEEMEA & LATAM.doc ".rar"
Ибн э Ашик

работал для меня, но без внешних кавычек: "C: \ Program Files (x86) \ WinRar \ Rar.exe" a "D: \ Hello 2 \ File.rar" "D: \ Hello 2 \"
user1620090

78

Я только что выяснил, что для случая, когда путь включает использование символов пробела, например, когда мне нужно получить доступ к приложению, xyzрасположение которого:

C:\Program Files\ab cd\xyz.exe

Чтобы запустить это из командной строки Windows, вам нужно использовать

C:\"Program Files"\"ab cd"\xyz.exe

или

"C:\Program Files\ab cd\xyz.exe"

Я пробовал это, но, похоже, не работает в моем случае: python "" C: \ Program Files (x86) \ Jenkins \ workspace \ Unit Checker Unit Test \ sqs-poller \ node_modules \ map-checker \ python \ unit_test.py "-d" C: \ Program Files (x86) \ Jenkins \ workspace \ Проверка модуля проверки карты \ MAP_CHECK_TMP \ # Тестовый случай "-o" C: \ Program Files (x86) \ Jenkins \ workspace \ Проверка модуля проверки карты \ MAP_CHECK_TMP \ # Тестовый случай "-o2" C: \ Program Files (x86) \ Jenkins \ workspace \ Unit Checker Unit Test \ MAP_CHECK_TMP \ #Test Case \ testcase_results.csv "" -l "C: \ Программные файлы (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ MAP_CHECK_TMP "-restore". может помочь?
Хафизан

22

Если двойные кавычки не решают проблему, попробуйте, например,

dir /X ~1 c:\

получить список альтернативных имен файлов или каталогов. Пример вывода:

11/09/2014 12:54 AM             8,065  DEFAUL~1.XML Default Desktop Policy.xml
06/12/2014  03:49 PM    <DIR>          PROGRA~1     Program Files 
10/12/2014  12:46 AM    <DIR>          PROGRA~2     Program Files (x86)

Теперь используйте короткие 8-символьные имена файлов или папок в 5-м столбце, например, PROGRA ~ 1 или DEFAUL ~ 1.XML, в своих командах. Например:

set JAVA_HOME=c:\PROGRA~1\Java\jdk1.6.0_45 

Это простой способ. Никаких двойных двойных кавычек.
Дейв Андерсон

Знаете ли вы, что короткий 8.3 является опцией NTFS и может быть отключен? Не надейся на это.
Зан Рысь

10

Обведите пути, содержащие пробелы, двойными кавычками.

cmd /C "C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*"

Тогда проблема заключается в том, что на Rar.exeсамом деле является синтаксис аргумента . Вы можете использовать это неправильно. Может попробовать "D:\Hello 2\"или "D:\Hello 2"вместо "D:\Hello 2\*.*"?
JAB

cmd / C "C: \ Program Files (x86) \ WinRar \ Rar.exe" a D: \ Hello \ File.rar D: \ Hello *. * (без пробелов, и это работает), но как иметь дело с пробелами?
tarssoft

@JAB, если вам нужно исключить файл с именем с пробелами вроде CEEMEA & LATAM.doc. Что это должно быть? "C:\Program Files\WinRAR\rar" a -x*CEEMEA & LATAM.doc ".rar"
Ибн э Ашик

10

Попробуйте указать сложные имена путей в двойных кавычках (и в конце добавить расширения файлов).

Для файлов:

call "C:\example file.exe"

Для справочника:

cd "C:\Users\User Name\New Folder"

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).


Есть ли в именах файлов подчеркивания? Как 'имя_файла' против 'имени файла'
SqueakyBeak

7

Я предпочитаю заключить команду, в ()которой действует, batchчто делает его немного легче читать:

cmd /C ("C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*")

3
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"

это работало для меня в командном файле


2

Просто добавьте кавычку

Пример: «C: \ Users \ Имя пользователя»

Надеюсь, это решено!


7
То же самое было сказано уже полдюжины раз. Какую дополнительную ценность это добавляет?
JJJ


0

Пробелы в командной строке (в командной строке оболочки VBA)

У меня была очень похожая проблема, которая в итоге приводила к пробелу в командной строке при автоматизации через VBA для получения содержимого из командного окна в текстовый файл. Эта тема была одной из многих, которые я нашел на этом пути, но это не совсем помогло мне найти решение.

Так что это может помочь другим с подобной проблемой: так как синтаксис с кавычками всегда трудно понять правильно, я думаю, что показ некоторых конкретных примеров всегда полезен. Дополнительная проблема, возникающая при использовании командной строки в VBA через оболочку, заключается в том, что строка кода часто не выдает ошибку, если что-то идет не так: на самом деле миг черного окна commend вводит в заблуждение, заставляя думать, что что-то было сделано.

Как пример ... скажем, у меня есть папка с текстовым файлом в нем, как в

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

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

cmd.exe /c "ipconfig /all > "C:\Alans Folder\test1.txt""

-3

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

C: \ Windows \ system32> cd c: \ Program Files \ MongoDB \ Server \ 3.2 \ bin

c: \ Program Files \ MongoDB \ Server \ 3.2 \ bin> mongo теперь вызывает командную строку mongo.exe

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.