2009-07-29 11 views
14

Chcę powołać:Jak przekazać cytowany znak potoku do cmd.exe?

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

użyciu cmd.exe. Z mojego doświadczenia wynika, że ​​cmd.exe usuwa pierwszą parę cytatów (powodując, że plik wykonywalny nie zostanie znaleziony) lub drugą parę cytatów (powodując błędną interpretację znaku potoku). Jak przekazać cytowany znak potoku do cmd.exe?

Odpowiedz

20

Można to zrobić tak, jak tam robisz, zamykając ciąg znaków za pomocą | w cudzysłowach.

Czy można uciec z akcentem okalającej^:

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

Na marginesie: Czemu ten budynek z devenv zamiast MSBuild?

+0

DevEnv zawsze był "wystarczająco dobry" i nie znałem MSBuild . Mam wieloplatformowy system kompilacji, który wywołuje DevEnv pod maską, więc nie sądzę, żebym zyskał za pomocą MSBuild. Czy ja? – Gili

+0

Przy okazji, gdzie jest udokumentowana ta ucieczka? – Gili

+0

Na przykład http://technet.microsoft.com/en-us/library/bb490954.aspx tutaj – Joey

5

Daszek (^) jest znak znaki specjalne powłoki uciec postać rzeczy jak <,>, (,), ...

cmd/c "echo Hello ^" World" 

Wyjście

Hello " World 
4

Oto inne rozwiązanie (obejście?) Znalazłem:

najpierw upewnij się, że zmienna środowiskowa definiuje charakter rury, na przykład:
set PIPE="|"

później uruchomić komendę określającą wyżej określonym środowisku nazwę zmiennej:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

To nie praca, nawet jeśli istnieją liczne owijarki między dzwoniącego i odbierającym. Używam go teraz z bardzo długim łańcuchem owijania: Python/Linux -> Wykonanie gościa VirtualBox -> Cmd/Windows -> devenv.com