Jak używać spacji w wierszu polecenia?

192

Jak używać spacji w wierszu poleceń systemu Windows?

cmd /C C:\Program Files (x86)\WinRar\Rar.exe a D:\Hello 2\File.rar D:\Hello 2\*.*
faressoft
źródło

Odpowiedzi:

261

W takim przypadku nie wystarczy pojedynczy znak cudzysłowu. Musisz dodać znaki cudzysłowu wokół każdej ścieżki, a także zawrzeć całe polecenie w cudzysłowie:

cmd /C ""C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*""
sakra
źródło
4
Tak, każda ścieżka powinna być ujęta w cudzysłów. Całe polecenie musiało być ponownie ujęte w inną parę cudzysłowów. Teraz działa! Dzięki!
Powstaje
@sakra też dla mnie nie działa. "" C: Program Files \ \ WinRAR \ WinRAR.exe "a "C: \ veri Tabani yedekler \ Dedicated_Pokemon_Pets_DB_Backup_2014_7_10_7_2.rar" -ri1 -mt2 -m5 "C: \ veri Tabani yedekler \ Dedicated_Pokemon_Pets_DB_Backup_2014_7_10_7_2.bak""
MonsterMMORPG
3
@ MonsterMMORPG przedrostek liniicmd /C
sakra
@sakra Chcę wykluczyć plik o nazwie ze spacjami CEEMEA & LATAM.doc. Co powinienem zrobić? "C:\Program Files\WinRAR\rar" a -agmmddyy -x*CEEMEA & LATAM.doc ".rar"
Ibn e Ashiq
pracował dla mnie, ale bez cudzysłowów: „C: \ Program Files (x86) \ WinRar \ Rar.exe” a „D: \ Hello 2 \ File.rar” „D: \ Hello 2 \”
user1620090
78

Właśnie zorientowałem się, że w przypadku, gdy ścieżka wymaga użycia białych znaków, na przykład gdy potrzebuję uzyskać dostęp do aplikacji, xyzktóra lokalizacja to:

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

Aby uruchomić to z wiersza poleceń systemu Windows, musisz użyć

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

lub

"C:\Program Files\ab cd\xyz.exe"
Mithil D.
źródło
Próbowałem tego, ale wydaje się, że nie działa w moim przypadku: python "" C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ sqs-poller \ node_modules \ map-checker \ python \ unit_test.py „-d” C: \ Program Files (x86) \ Jenkins \ workspace \ Test modułu sprawdzania mapy \ MAP_CHECK_TMP \ # Przypadek testowy "-o" C: \ Program Files (x86) \ Jenkins \ workspace \ Test modułu sprawdzania mapy \ MAP_CHECK_TMP \ # Przypadek testowy „-o2” C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ MAP_CHECK_TMP \ #Test Case \ testcase_results.csv "" -l "C: \ Program Files (x86) \ Jenkins \ workspace \ Map Checker Unit Test \ MAP_CHECK_TMP „-restore”. może pomóc?
hafizan
22

Jeśli podwójne cudzysłowy nie rozwiązują problemu, spróbuj np

dir /X ~1 c:\

aby uzyskać listę alternatywnych nazw plików lub katalogów. Przykładowe dane wyjściowe:

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)

Teraz w swoich poleceniach użyj krótkiego 8-znakowego pliku lub nazwy folderu w 5. kolumnie, np. PROGRA ~ 1 lub DEFAUL ~ 1.XML. Na przykład:

set JAVA_HOME=c:\PROGRA~1\Java\jdk1.6.0_45 
rob2universe
źródło
To jest prosty sposób. W grę nie wchodzi podwójny cytat.
Dave Anderson
Czy wiesz, że wersja krótka 8.3 jest opcją NTFS i można ją wyłączyć? Nie polegaj na tym.
Zan Lynx
10

Obejmuj ścieżki zawierające spacje podwójnymi cudzysłowami.

cmd /C "C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*"
UKŁUCIE
źródło
Problem polega na tym, jaka Rar.exejest faktycznie składnia argumentu . Być może używasz go nieprawidłowo. Może spróbujesz "D:\Hello 2\"czy "D:\Hello 2"zamiast "D:\Hello 2\*.*"?
JAB
cmd / C "C: \ Program Files (x86) \ WinRar \ Rar.exe" a D: \ Hello \ File.rar D: \ Hello *. * (Nie ma spacji i działa), ale jak to zrobić zajmować się spacjami?
faressoft
@JAB, jeśli chcesz wykluczyć plik o nazwie ze spacjami takimi jak CEEMEA & LATAM.doc. Co to powinno być? "C:\Program Files\WinRAR\rar" a -x*CEEMEA & LATAM.doc ".rar"
Ibn e Ashiq
10

Spróbuj podać złożone nazwy ścieżek w cudzysłowie (i dołącz rozszerzenia plików na końcu).

Dla plików:

call "C:\example file.exe"

Dla katalogu:

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

CMD interpretuje tekst z podwójnymi cudzysłowami („xyz”) jako jeden ciąg, a tekst w pojedynczych cudzysłowach („xyz”) jako polecenie. Na przykład:

DLA %% A w ('dir / b / s * .txt') do ('command')

DLA %% A w ('dir / b / s * .txt') do (echo "%% A")

I jedna dobra rzecz: cmd nie rozróżnia * i wielkości liter jak bash. Zatem „Nowy plik fiLE.txt” i „nowy plik.TXT” są do niego podobne.

* Uwaga: W zmiennych %% A w powyższych przypadkach rozróżniana jest wielkość liter (%% A nie jest równy %% a).

Vaisak Mohan
źródło
Czy liczą się podkreślenia w nazwach plików? Jak „nazwa_pliku” vs „nazwa pliku”
SqueakyBeak
7

Wolę zawrzeć komendę, ()która jest poprawna, batchco ułatwia czytanie:

cmd /C ("C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*")
Dan
źródło
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"

działało to dla mnie w pliku wsadowym

James Brown
źródło
2

Wystarczy dodać znak cudzysłowu

Przykład: „C: \ Users \ User Name”

Mam nadzieję, że zostało rozwiązane!

Patrick Prakash
źródło
7
To samo zostało już powiedziane pół tuzina razy. Jaką dodatkową wartość to dodaje?
JJJ,
1

Powinieneś spróbować użyć cytatów.

cmd /C "C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*"
Jaanus
źródło
2
To nie jest wiarygodne. W niektórych przypadkach (patrz microsoft.com/resources/documentation/windows/xp/all/proddocs/… - Przetwarzanie cudzysłowów) zamiast tego wykonywany jest plik „C: \ Program.bat”.
Micha Wiedenmann
0

Spacje w wierszu polecenia (w wierszu kodu powłoki VBA)

Miałem bardzo podobny problem, który skończył się spacją w wierszu polecenia podczas automatyzacji za pomocą VBA, aby uzyskać zawartość z okna poleceń do pliku tekstowego. Ten wątek był jednym z wielu, które złapałem po drodze, co nie do końca dało mi rozwiązanie.

Może to pomóc innym z podobnym problemem: Ponieważ składnia z cudzysłowami zawsze jest trudna do poprawienia, myślę, że pokazanie niektórych konkretnych przykładów jest zawsze przydatne. Dodatkowym problemem, który pojawia się przy użyciu wiersza polecenia w VBA za pośrednictwem powłoki, jest to, że linia kodu często nie popełnia błędu, gdy coś pójdzie nie tak: w rzeczywistości mrugnięcie czarnego okna polecenia wprowadza w błąd, myśląc, że coś zostało zrobione.

Jako przykład… powiedz, że mam folder z plikiem tekstowym jak w

C: \ Alans Folder \ test1.txt ( https://imgur.com/FELSdB6 )

Miejsce w nazwie folderu stanowi problem.

Coś takiego działałoby, zakładając, że Folder AlansFolder istnieje

Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
 Shell "cmd.exe /c ""ipconfig /all > C:\AlansFolder\test1.txt"""
End Sub

To nie zadziała. (To nie będzie błąd).

Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
 Shell "cmd.exe /c ""ipconfig /all > C:\Alans Folder\test1.txt"""
End Sub

Włączenie par cytatów na ścieżce sprawi, że będzie działać

Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
 Shell "cmd.exe /c ""ipconfig /all > ""C:\Alans Folder\test1.txt"""""
End Sub

(Nawiasem mówiąc, jeśli plik tekstowy nie istnieje, zostanie utworzony).

Z perspektywy czasu widzimy, że moje rozwiązanie wiąże się w przybliżeniu z niektórymi już podanymi.

Konwersja tego wiersza kodu na ręczne polecenie otrzymalibyśmy

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

To wydaje się działać

Działa to również

ipconfig /all > C:\AlansFolder\test1.txt

To nie

ipconfig /all > C:\Alans Folder\test1.txt

Ta ostateczna forma również działa i wiąże się z rozwiązaniem sacra… ” Musisz dodać cudzysłowy wokół każdej ścieżki, a także umieścić całe polecenie w cudzysłowie „… ..

cmd.exe /c "ipconfig /all > "C:\Alans Folder\test1.txt""
Alan Elston
źródło
-3

Może rozwiązać ten problem przez cd polecenia , to polecenie rozpoznaje spacje bez podwójnych cudzysłowów i można w ten sposób wywołać dowolny program, na przykład:

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

c: \ Program Files \ MongoDB \ Server \ 3.2 \ bin> mongo teraz uruchom wiersz polecenia mongo.exe

Karen
źródło