Odpowiedzi:
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\*.*""
cmd /C
CEEMEA & LATAM.doc
. Co powinienem zrobić? "C:\Program Files\WinRAR\rar" a -agmmddyy -x*CEEMEA & LATAM.doc ".rar"
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, xyz
któ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"
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
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\*.*"
Rar.exe
jest 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\*.*"
?
CEEMEA & LATAM.doc
. Co to powinno być? "C:\Program Files\WinRAR\rar" a -x*CEEMEA & LATAM.doc ".rar"
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).
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
Wystarczy dodać znak cudzysłowu
Przykład: „C: \ Users \ User Name”
Mam nadzieję, że zostało rozwiązane!
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\*.*"
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""
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