2010-09-17 14 views
10

Để chuyển một đường dẫn có khoảng trống tới ứng dụng .NET console, bạn nên thoát khỏi nó. Có lẽ không thoát khỏi nhưng bao quanh với dấu ngoặc kép:Cách để thoát khỏi đường dẫn có chứa các khoảng trống

myapp.exe --path C:\Program Files\MyApp` 

trở thành

new string[] { "--path", "C:\Program", "Files\MyApp" } 

nhưng

myapp.exe --path "C:\Program Files\MyApp" 

trở thành

new string[] { "--path", "C:\Program Files\MyApp" } 

và nó hoạt động tốt và bạn có thể phân tích một cách dễ dàng .

tôi muốn mở rộng các thiết lập các thông số được đưa ra với một sự bổ sung một và bắt đầu một quá trình mới với các thiết lập kết quả của các thông số:

new ProcessStartInfo(
    Assembly.GetEntryAssembly().Location, 
    String.Join(" ", Enumerable.Concat(args, new[] { "--flag" }))) 

này trở nên myapp.exe --path C:\Program Files\MyApp --flag nơi con đường giảm thoát của nó.

Cách khắc phục sự cố với giải pháp chung? (không tìm kiếm giá trị của mỗi thông số yêu cầu thoát và trích dẫn nó theo cách thủ công)

Trả lời

5

Tôi không nghĩ rằng có thể vì không gian là dấu phân cách cho các đối số CLI để chúng cần phải được thoát.

Bạn có thể trích xuất phần này thành một phương thức tiện ích khá độc đáo để bạn chỉ có thể chạy args.Escape() trong mã của mình ở trên.

public static string[] Escape(this string[] args) 
{ 
    return args.Select(s => s.Contains(" ") ? string.Format("\"{0}\"", s) : s).ToArray(); 
} 
+0

Tuyệt vời! Cảm ơn! btw, tôi nghĩ rằng không cần phải 'chuỗi []' và 'IEnumerable 'dãy ở đây cũng – abatishchev

4

Chỉ trích dẫn mọi tham số. Điều này ...

myapp.exe "--path" "C:\Program Files\MyApp" "--flag" 

... là dòng lệnh hoàn toàn hợp lệ và thực hiện chính xác những gì bạn muốn.

+0

tức là' Chọn (s => String.Format ("\" {0} \ "", s)) '. Trông tuyệt vời nhưng giải pháp @ amarsuperstar tôi thích hơn một chút :) Cảm ơn bạn, Heinzi – abatishchev

+0

không hoạt động trong trường hợp đường dẫn có dấu "\" như "C: \ Program Files \ MyApp \" – EdmundYeung99

+1

@ EdmundYeung99: Vâng, đó là một vấn đề thực sự phức tạp. Câu hỏi sau có chứa một vài nỗ lực để khắc phục sự cố: http://stackoverflow.com/q/5510343/87698 – Heinzi

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