2009-12-05 39 views
76

Tôi mới viết kịch bản và không thể làm việc này. Tôi có thể nếu tôi di chuyển các tập tin vào một con đường mà không có một không gian trong đó, nhưng tôi muốn nó làm việc với không gian nếu nó có thể.Đặt biến đường dẫn với dấu cách trong đường dẫn trong tệp .cmd của Windows hoặc tệp lô

Tôi muốn trích xuất một loạt các bản cập nhật Office vào một thư mục có tệp .cmd. Để làm cho tập tin batch có thể sử dụng được trên bất kỳ máy tính nào, tôi đặt một biến đường dẫn mà tôi chỉ phải thay đổi ở một nơi để chạy nó trên một máy khác. Vấn đề là con đường có một không gian trong đó. Nếu tôi đặt dấu ngoặc kép quanh đường dẫn trong định nghĩa, cmd.exe sẽ đặt chúng xung quanh đường dẫn trước khi nó nối thêm tên tệp và công tắc và lô không thành công với "Lỗi cú pháp dòng lệnh". Không có dấu ngoặc kép, nó không thành công, "không được nhận dạng như là một lệnh nội bộ hoặc bên ngoài, chương trình có thể hoạt động hoặc tập tin thực thi."

Để thử nghiệm, tôi đang sử dụng công tắc trợ giúp cho đến khi hoặc nếu tôi có thể làm việc đó. Tôi có thể làm điều đó bằng cách sử dụng tên tệp/thư mục 8.3 (ví dụ: Tài liệu của tôi dưới dạng MyDocu ~ 1), nhưng nó có thể được thực hiện theo cách khác không?

+0

Dấu ngoặc kép phải chứa đường dẫn có tên tệp và thông số dòng lệnh phải tuân theo. Bạn có thể cung cấp thêm một số chi tiết về cách dòng lệnh được tạo ra không? Nếu bạn đặt dấu ngoặc kép quanh đường dẫn trong định nghĩa, cmd.exe sẽ đặt chúng xung quanh đường dẫn trước khi gắn thêm tên tệp và chuyển đổi – vladhorby

Trả lời

79

Hãy thử một cái gì đó như thế này:

SET MY_PATH=C:\Folder with a space 

"%MY_PATH%\MyProgram.exe" /switch1 /switch2 
+0

Đó là những gì tôi đã làm bằng cách sử dụng Replace in Notepad. Cảm ơn bạn. – marcerickson

+3

Vui vì nó đã giúp. Sẽ tốt hơn nếu bạn upvote và chấp nhận bất cứ câu trả lời nào bạn cảm thấy đã giúp bạn. – aphoria

+0

Tại sao điều này không hiệu quả đối với tôi? Tôi phải sử dụng MY_PATH trong câu lệnh if nếu không tồn tại "% dest_fold% \ %% a \" mkdir "% dest_fold%" \ %% a \, nhưng nó không hoạt động –

25

Có hai lựa chọn ở đây. Trước tiên, bạn có thể lưu trữ các con đường không thể viện chứng và chỉ trích nó sau này:

set MyPath=C:\Program Files\Foo 
"%MyPath%\foo with spaces.exe" something 

Một tùy chọn khác bạn có thể sử dụng là một chương trình con mà alles cho chuỗi un-trích dẫn (nhưng trong trường hợp này nó thực sự không phải là một ý tưởng rất tốt kể từ khi bạn đang thêm dấu ngoặc kép, tước chúng đi và thêm lại chúng mà không có lợi ích):

set MyPath="C:\Program Files\Foo" 
call :foo %MyPath% 
goto :eof 

:foo 
"%~1\foo.exe" 
goto :eof 

Xóa dấu ngoặc kép xung quanh đối số. Điều này có ích khi chuyển tên thư mục quanh dấu ngoặc kép nhưng, như đã nói ở trên, trong trường hợp cụ thể này không phải là ý tưởng hay nhất :-)

+0

Tôi đã sử dụng phương pháp đầu tiên, sử dụng Thay thế trong Notepad. Thứ hai dường như phức tạp không cần thiết. Cảm ơn bạn. – marcerickson

+1

Tôi có một tập tin Batch được các thông số. Sử dụng 'set LALA =% ~ 1'đã làm việc cho tôi. – JCH2k

+0

Phương pháp 2 làm việc cho tôi trong một vòng lặp phức tạp. – Noumenon

0

Nếu bạn cần lưu trữ đường dẫn vĩnh viễn (đường dẫn không thay đổi khi khởi động cmd)

  1. chạy Command Prompt as administrator (nhấp chuột phải vào cmd.exe và chọn Run as administrator)

  2. Trong cmd setx path "%path%;your new path" sau đó nhập

  3. Kiểm tra xem đường dẫn có được thực hiện đúng không bằng cách nhập đường dẫn và nhấn enter

+1

Tôi nghĩ rằng, câu hỏi không phải là về * biến PATH *, mà là về biến * đường dẫn *. OP dường như muốn lưu trữ một đường dẫn cụ thể vào một biến và sử dụng giá trị trên tập lệnh batch. –

6

Tôi luôn đặt đường dẫn trong dấu ngoặc kép khi tạo tệp .bat. (Tôi vừa thêm PAUSE để nó không đóng màn hình.)

Ví dụ:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe" 
PAUSE 
5

Cách thích hợp để làm điều này là như vậy:

@ECHO off 
SET MY_PATH=M:\Dir\^ 
With Spaces\Sub Folder^ 
\Dir\Folder 
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat 
CALL "%MY_PATH%\hello.bat" 
pause 
30

tôi sử dụng

set "VAR_NAME=<String With Spaces>" 

khi cập nhật đường dẫn:

set "PATH=%UTIL_DIR%;%PATH%" 
+0

cảm ơn, cuối cùng là câu trả lời hoạt động –

9

Hãy thử điều này;

  1. tạo một biến như sau

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"** 
    
  2. Sau đó thay thế các đường dẫn với biến. Hãy chắc chắn để thêm dấu ngoặc kép để bắt đầu và kết thúc

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll" 
    
1

Cách đơn giản nhất để khắc phục vấn đề này là đặt tên thư mục trong dấu ngoặc kép:

(cd\New Folder\...) --> (cd\"New Folder"\...)

Hy vọng điều này giúp.

Các vấn đề liên quan