2009-07-29 6 views
14

Tôi muốn gọi:Làm thế nào để vượt qua một ký tự ống dẫn đến cmd.exe?

"c:\(...)\devenv.com" foo.sln /build "Debug|Win32" 

sử dụng cmd.exe. Theo kinh nghiệm của tôi, cmd.exe hoặc là loại bỏ cặp ngoặc kép đầu tiên (gây ra không thể tìm thấy được) hoặc cặp ngoặc kép thứ hai (làm cho ký tự ống bị hiểu sai). Làm cách nào để chuyển một ký tự ống dẫn được trích dẫn tới cmd.exe?

Trả lời

20

Bạn có thể làm theo cách bạn đang làm ở đó, kèm theo chuỗi với các dấu ngoặc kép |.

Hoặc bạn có thể thoát khỏi nó với circumflex giọng^:

"c:\(...)\devenv.com" foo.sln /build Debug^|Win32 

Như một mặt lưu ý: Tại sao các bạn xây dựng này với devenv thay vì MSBuild?

+0

DevEnv luôn "đủ tốt" và tôi không quen với MSBuild . Tôi đã có một hệ thống xây dựng đa nền tảng gọi DevEnv dưới mui xe vì vậy tôi không nghĩ rằng tôi đạt được nhiều bằng cách sử dụng MSBuild. Tôi có? – Gili

+0

Nhân tiện, nhân vật thoát này được ghi lại ở đâu? – Gili

+0

Ví dụ: http://technet.microsoft.com/en-us/library/bb490954.aspx tại đây – Joey

5

Các dấu mũ (^) nhân vật là nhân vật vỏ đặc biệt để thoát khỏi nhân vật cho những thứ như <,>, (,), ...

cmd/c "echo Hello ^" World" 

Output

Hello " World 
4

Dưới đây là một giải pháp khác (workaround?) Tôi đã tìm thấy:

trước tiên, đảm bảo biến môi trường xác định ký tự ống, ví dụ:
set PIPE="|"

sau, hãy chạy lệnh chỉ định tên biến môi trường được xác định trên:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

Đó không được công việc ngay cả khi có nhiều wrappers giữa người gọi và callee. Tôi hiện đang sử dụng nó với một chuỗi các trình bao bọc rất dài: Python/Linux -> VirtualBox guest executeProcess -> Cmd/Windows -> devenv.com