2013-01-06 29 views
15

tôi cần phải chạySử dụng khoảng trống trong kịch bản dơi, mà không có dấu ngoặc kép

start cmd.exe /k "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run" 

Vấn đề là con đường đầu tiên có không gian (Program Files). Tôi không thể sử dụng dấu ngoặc kép, bởi vì chúng được sử dụng cho lệnh đầy đủ rồi.

Tôi làm cách nào để sử dụng dấu cách trong lệnh này?

+0

Đơn & làm gì? – Bill

+1

Đây là dấu tách cho lệnh cmd. – Qiao

+0

nếu bạn không thể đưa mỗi người một cách riêng biệt? ví dụ. bắt đầu cmd.exe/k "lệnh 1" & "lệnh 2", sau đó có thể bạn nên đặt các lệnh đó trong một tệp .bat riêng biệt và chỉ chạy nó. – Bill

Trả lời

15

Ai nói bạn không thể thêm dấu ngoặc kép quanh đường dẫn exe khi lệnh/C đã được trích dẫn? Nó hoạt động tốt ! :-)

start cmd.exe /k ""C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate" & cd d:\home\name\addon\ & cfx run" 

Dấu ngoặc kép bên ngoài xung quanh/C được xóa trước khi thực thi, chỉ để lại dấu ngoặc kép quanh đường dẫn exe của bạn. Bạn có thể đọc về cách CMD xử lý dấu ngoặc kép trong trợ giúp. Chỉ cần nhập CMD /? hoặc HELP CMD từ lời nhắc lệnh. Nó không gây nhầm lẫn.

If /C or /K is specified, then the remainder of the command line after 
the switch is processed as a command line, where the following logic is 
used to process quote (") characters: 

    1. If all of the following conditions are met, then quote characters 
     on the command line are preserved: 

     - no /S switch 
     - exactly two quote characters 
     - no special characters between the two quote characters, 
      where special is one of: &<>()@^| 
     - there are one or more whitespace characters between the 
      two quote characters 
     - the string between the two quote characters is the name 
      of an executable file. 

    2. Otherwise, old behavior is to see if the first character is 
     a quote character and if so, strip the leading character and 
     remove the last quote character on the command line, preserving 
     any text after the last quote character. 

Lệnh của bạn có nhiều hơn 2 dấu ngoặc kép, vì vậy tùy chọn 2 được theo sau.

Lần duy nhất bên trên không hoạt động nếu tên exe của bạn chứa một ký tự đặc biệt như &, ví dụ: this&that.exe. Điều đó gây ra một vấn đề vì tên exe không được trích dẫn khi lệnh START được phân tích cú pháp ban đầu. Điều đó có thể được sửa bằng cách thoát ký tự vấn đề bên trong tên tệp.

start cmd.exe /k ""this^&that.exe" & echo something else" 
+1

Tôi thậm chí không thử nghiệm điều này, tôi nghĩ rằng nó 100% sẽ mess tất cả mọi thứ – Qiao

4

Bạn có thể thử với cái cũ DOS văn phong, nơi mọi con đường đoạn có tối đa 8 ký tự như:

C:\Progra~1\Mozill~1\ 

các ~ 1 là từ thứ tự chữ cái:

C:\DisIsMyDirAlpha 
C:\DisIsMyDirBeta 
C:\DisIsMyDirGamma 

là :

C:\DisIsM~1 
C:\DisIsM~2 
C:\DisIsM~3 
+1

Điều đó sẽ không hoạt động nếu trên ổ đĩa NTFS có tên ngắn 8,3 bị tắt. Có một giải pháp đơn giản hơn luôn hoạt động: Xem [câu trả lời của tôi] (http://stackoverflow.com/a/14184116/1012053) – dbenham

0

Sử dụng dấu ngoặc kép cho đường dẫn đầu tiên và thoát chúng bằng ^:

start cmd.exe /k "^"C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate^" & cd d:\home\name\addon\ & cfx run" 

EDIT:

Về bình luận @dbenham 's:
Thú vị. Thoát với ^ đã làm việc cho tôi, mặc dù lệnh thực tế của tôi hơi khác một chút vì tôi đã thử nghiệm nó với lệnh đầu tiên xuất hiện trong tâm trí của tôi.

này hoạt động trên máy tính của tôi (Windows XP SP 3):

start cmd.exe /k "xcopy ^"C:\Program Files\Windows Live\Messenger\license.rtf^" c:\" 

Tôi cũng đọc về thoát sử dụng dấu ngoặc kép "", nhưng điều đó không làm việc cho tôi với ví dụ trên của tôi.
Sau đó, một lần nữa, tôi không có tập tin hàng loạt guru và có thể cmd.exe hoạt động khác nhau khi bạn sử dụng & (mà tôi chưa bao giờ nghe nói về trước đây).

+1

Điều đó KHÔNG hoạt động. Thử nó! Nếu bạn loại bỏ các carets, như tôi đã làm trong [câu trả lời của tôi] (http://stackoverflow.com/a/14184116/1012053), thì nó hoạt động tốt. – dbenham

+0

@ dbenham: Có lẽ nó chỉ làm việc cho tôi vì tôi đã sử dụng một lệnh ví dụ hơi khác. Tôi đã thêm một số thông tin vào câu trả lời của tôi! –

+1

Trường hợp của bạn hoạt động vì bạn đã thoát khỏi dấu ngoặc kép xung quanh một tùy chọn lệnh. Các carets được loại bỏ khi XCOPY đọc tùy chọn. Nó cũng hoạt động tốt mà không có các carets. Nó không hoạt động nếu bạn thoát khỏi dấu ngoặc kép xung quanh một tập tin thực thi với các dấu cách trong tên. Trình phân tích cú pháp sẽ tách tên của exe ở không gian đầu tiên và nó sẽ thất bại. Tôi sẽ cấp cho bạn, hàng loạt trích dẫn và thoát có thể phức tạp, nhưng câu trả lời này là sủa cây sai. – dbenham

0
start cmd.exe /k "" "C:\Program Files (x86)\Mozilla Firefox\sdk\bin\activate & cd d:\home\name\addon\ & cfx run" 

Thêm hai dấu ngoặc kép phụ trước khi filepath. Điều này thường làm việc cho tôi. Chúc may mắn :)

+0

Điều đó trông khá khó chịu với tôi, vì vậy tôi đã thử nó và nó đã không hoạt động. Tôi thậm chí không chắc chắn những gì các báo giá thêm được dự định để thực hiện, nhưng nó giống như nhập "" "C: \ Program Files (x86) \ Mozilla Firefox \ sdk \ bin \ kích hoạt & cd d: \ home \ name \ addon \ & cfx run' tại dấu nhắc, tất nhiên là không hoạt động. Lỗi tôi nhận được trên Windows 7 theo cách nào đó là 'Tên tệp, tên thư mục hoặc cú pháp nhãn khối lượng không chính xác.' Trong mọi trường hợp, câu trả lời của @ dbenham là chính xác. –

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