2009-02-20 13 views
6

Ben bu çizgiyi yürütmek isteyen bir kabuk komut dosyası vardır:Bir bash komut dosyasından bir batch dosyasına argüman olarak boru karakteri nasıl eklenir?

qtvars.bat vsstart "qt.sln" /BUILD "Debug|Win32" 

Bu (ı qtvars.bat değiştirmek zorunda olsa da, ama bunun konuyla ilgisi yok) çalışıyor. Sorun şu ki, komutun bir değişkende çalışmasını istiyorum: DÜZENLEME: Bu, bash'a yazdığımda da işe yaramıyor. Önceden adil bir karşılaştırma yapmak için yazılan cmd.exe yazıyordum.

command="qtvars.bat" 
args="vsstart" 

$command $args "qt.sln" /BUILD "Debug|Win32" 

Şimdi boru üzerinde boğulmaktadır! Ben boşuna tırnak ve/veya boru, bütün kaçan biçimleri bir demet denedim

'Win32' is not recognized as an internal or external command, 
operable program or batch file. 

: bu mesaj çıktı. o .: yerine bir toplu dosyasından daha herhangi fikirler için

command="devenv.exe" 
args="" 

$command $args "qt.sln" /BUILD "Debug|Win32" 

sayesinde örneğin bir çalıştırılabilir olduğunda İlginçtir, işe yarıyor.

cevap

7

^karakteri ile bir yığın dosyasındaki boru karakterini "kaçarsınız", bu nedenle ...

echo^| Burada bazı metin^|

Görüntüyü üretebilir ...

| Buradaki bazı metinler |

Bu durumda size bunun yardımcı olup olmayacağını bilmiyorum. Belki her boru karakterini bir^ile hazırlamaya çalışın ve ne olduğunu görün.

3

Bu partisiydi ve CMD.EXE hem özel görmezden için talimat gereken çift kaçan, klasik bir durumdur | (boru) karakteri. , Aslında geçişini zorluyor yukarıdaki kullanma

qtvars.bat vsstart qt.sln /BUILD "Debug|Win32" 

:

$command $args "qt.sln" /BUILD '"Debug|Win32"' 

Bu CMD.EXE isteminde, yazarak eşdeğer olacaktır:

izlemeyi deneyin CMD.EXE için çift tırnak işareti (bash yerine onları yiyerek.) En dıştaki tek tırnaklar, içlerinde bulunanları yorumlamak veya herhangi bir şekilde dokunmamaya teşvik eder; iç çift tırnak CMD.EXE içine herhangi bir özel karakterleri (bu durumda boru) görmezden gelmesi için talimat verir.

Alternatif

, ayrıca deneyebilirsiniz:

qtvars.bat vsstart qt.sln /BUILD Debug\|Win32 

Not tek tırnak kullanımı (:

$command $args "qt.sln" /BUILD 'Debug\|Win32' 

Bu CMD.EXE isteminde, yazarak eşdeğer olmalıdır CMD.EXE'ye olduğu gibi!), o bash yerine, \ yorumlamak (ve olmayacaktır sağlarız bunu geçecek.)

+0

Bunları denedim. Emin olmak için şimdi tekrar yaptım. Hata mesajında ​​bazen 'Win32' 'Win32 \' '' olurken, aynı hatayı alırlar. – Owen

+0

"cmd.exe qtvars.bat" komutunu ayarlamayı deneyin. – vladr

0

ilginç! | kaçmak ne yapar?

bu çalışıyor mu?

  • yankı "ayıklama | Win32"
  • yankı "qt.sln"/BUILD 'Debug | Win32'nin'
+0

Bunu mu demek istediniz: Niyetiniz nedir? Bash veya cmd.exe dosyasını geçmek için | argümanın bir parçası olarak, onu boru sözdizimi olarak işlemeye çalışmak yerine. veya Durumumdaki sonuç nedir? Hiçbir şey değil. – Owen

+0

Kaçış kullanmanın sonucu neydi bilmek istedim? – dirkgently

1

Burada başka çözüm (geçici çözüm?) Buldum:

ilk bir ortam değişkeni, örneğin, boru karakteri tanımlar temin:
set PIPE="|"

sonra, yukarıda tanımlandığı ortam değişkeni belirten komutu:
"c:\(...)\devenv.com" foo.sln /build Debug%PIPE%Win32

Bu, arayan ve aranan arasında çok sayıda sarıcı olsa bile işi yapar. Şimdi sarmalayıcılarının çok uzun zincirle kullanıyorum: Python/Linux -> VirtualBox konukların executeProcess -> Cmd/Windows -> devenv.com

(çapraz gönderilen: How to pass a quoted pipe character to cmd.exe?) Biliyorum

1

Windows komut dosyası dilinde bir boru karakterinden kaçınmak bir düzeltme işareti (^) ile yapılır. Bunu sadece geçen gün yapmak zorundaydım. Bunun eski olduğunu biliyorum, ama sanki başkaları da böyle koştuğumda bulduğum şeyi yayınlayacağımı sandım.

+0

Teşekkürler! Bunu takdir ediyorum. Bir şekilde, önceki cevabın bunu söylediğini fark etmedim ve cevabınızın bildirimi beni buraya getirdi. – Owen

İlgili konular