Câu trả lời:
Dấu ngoặc đơn sẽ không làm trong trường hợp đó. Bạn phải thêm dấu ngoặc kép xung quanh mỗi đường dẫn và cũng bao gồm toàn bộ lệnh trong dấu ngoặc kép:
cmd /C ""C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*""
cmd /C
CEEMEA & LATAM.doc
. Tôi nên làm gì? "C:\Program Files\WinRAR\rar" a -agmmddyy -x*CEEMEA & LATAM.doc ".rar"
Tôi chỉ tìm ra rằng trong trường hợp đường dẫn liên quan đến việc sử dụng các ký tự khoảng trắng, chẳng hạn, khi tôi cần truy cập vào ứng dụng xyz
đó là vị trí nào:
C:\Program Files\ab cd\xyz.exe
Để chạy này từ dấu nhắc cmd của windows, bạn cần sử dụng
C:\"Program Files"\"ab cd"\xyz.exe
hoặc là
"C:\Program Files\ab cd\xyz.exe"
Nếu dấu ngoặc kép không giải quyết được vấn đề thì hãy thử, vd
dir /X ~1 c:\
để có được một danh sách các tên tập tin hoặc thư mục thay thế. Ví dụ đầu ra:
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)
Bây giờ sử dụng tên tệp hoặc thư mục 8 ký tự ngắn trong cột thứ 5, ví dụ PROGRA ~ 1 hoặc DEFAUL ~ 1.XML, trong các lệnh của bạn. Ví dụ:
set JAVA_HOME=c:\PROGRA~1\Java\jdk1.6.0_45
Kèm theo các đường dẫn chứa khoảng trắng với dấu ngoặc kép.
cmd /C "C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*"
Rar.exe
thực sự là gì. Bạn có thể đang sử dụng nó sai. Có thể thử "D:\Hello 2\"
hoặc "D:\Hello 2"
thay vì "D:\Hello 2\*.*"
?
CEEMEA & LATAM.doc
. Nó nên là gì? "C:\Program Files\WinRAR\rar" a -x*CEEMEA & LATAM.doc ".rar"
Cố gắng cung cấp tên đường dẫn phức tạp trong dấu ngoặc kép (và bao gồm phần mở rộng tệp ở cuối cho tệp.)
Đối với tệp:
call "C:\example file.exe"
Đối với thư mục:
cd "C:\Users\User Name\New Folder"
CMD diễn giải văn bản với dấu ngoặc kép ("xyz") dưới dạng một chuỗi và văn bản trong dấu ngoặc đơn ('xyz') dưới dạng một lệnh. Ví dụ:
CHO %% A trong ('dir / b / s * .txt') do ('lệnh')
CHO %% A trong ('dir / b / s * .txt') do (echo "%% A")
Và một điều tốt, cmd không phải là trường hợp nhạy cảm như bash. Vì vậy, "New fiLE.txt" và "tệp mới.TXT" giống nhau.
* Lưu ý: Các biến %% A trong trường hợp trên là phân biệt chữ hoa chữ thường (%% A không bằng %% 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"
điều này làm việc cho tôi trong một tập tin hàng loạt
Chỉ cần thêm Dấu ngoặc kép
Ví dụ: "C: \ Users \ Tên người dùng"
Hy vọng nó đã được giải quyết!
Bạn nên thử sử dụng dấu ngoặc kép.
cmd /C "C:\Program Files (x86)\WinRar\Rar.exe" a "D:\Hello 2\File.rar" "D:\Hello 2\*.*"
Dấu cách trong Dấu nhắc khen ngợi (trong dòng mã lệnh VBA Shell)
Tôi đã gặp một vấn đề rất giống với kết quả là một khoảng trắng trong dấu nhắc lệnh khi tự động hóa thông qua VBA để lấy nội dung từ cửa sổ lệnh vào tệp văn bản. Chủ đề này là một trong nhiều bài tôi bắt gặp trên đường mà không hoàn toàn giúp tôi giải pháp.
Vì vậy, điều này có thể giúp những người khác có vấn đề tương tự: Vì cú pháp với dấu ngoặc kép luôn khó hiểu, tôi nghĩ rằng việc hiển thị một số ví dụ cụ thể luôn hữu ích. Vấn đề bổ sung mà bạn gặp phải khi sử dụng dấu nhắc lệnh trong VBA thông qua điều Shell, đó là dòng mã thường không bị lỗi khi có sự cố xảy ra: trên thực tế, một nháy mắt của cửa sổ khen thưởng màu đen đã khiến mọi người hiểu lầm.
Như ví dụ, ông nói tôi có một Thư mục, với một tệp văn bản trong đó như tại
C: \ Thư mục Alans \ test1.txt ( https://imgur.com/FELSdB6 )
Không gian trong tên thư mục đưa ra vấn đề.
Một cái gì đó như thế này sẽ hoạt động, giả sử Thư mục, AlansFolder, tồn tại
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:\AlansFolder\test1.txt"""
End Sub
Điều này sẽ không làm việc. (Nó không có lỗi).
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > C:\Alans Folder\test1.txt"""
End Sub
Bao gồm các cặp trích dẫn xung quanh đường dẫn sẽ làm cho nó hoạt động
Sub ShellBlackCommandPromptWindowAutomatingCopyingWindowContent()
Shell "cmd.exe /c ""ipconfig /all > ""C:\Alans Folder\test1.txt"""""
End Sub
(Nhân tiện, nếu tệp văn bản không tồn tại, thì nó sẽ được thực hiện).
Với lợi ích của nhận thức muộn, chúng ta có thể thấy rằng giải pháp của tôi đã kết hợp xấp xỉ với một số đã được đưa ra ..
Chuyển đổi dòng mã đó thành một lệnh thủ công, chúng ta sẽ có
ipconfig /all > "C:\Alans Folder\test1.txt"
Điều đó dường như làm việc
Điều này cũng hoạt động
ipconfig /all > C:\AlansFolder\test1.txt
Cái này không
ipconfig /all > C:\Alans Folder\test1.txt
Hình thức cuối cùng này cũng hoạt động và gắn kết với giải pháp từ sacra. Bạn phải thêm dấu ngoặc kép xung quanh mỗi đường dẫn và cũng kèm theo toàn bộ lệnh trong dấu ngoặc kép Giá trị ..
cmd.exe /c "ipconfig /all > "C:\Alans Folder\test1.txt""
Nó có thể giải quyết vấn đề này bằng lệnh cd , lệnh này hiểu khoảng trắng mà không cần dấu ngoặc kép và bạn có thể gọi bất kỳ chương trình nào theo cách này chẳng hạn:
C: \ Windows \ system32> cd c: \ Tệp chương trình \ MongoDB \ Server \ 3.2 \ bin
c: \ Tệp chương trình \ MongoDB \ Server \ 3.2 \ bin> mongo bây giờ lệnh nhắc lệnh mongo.exe