2011-02-09 12 views
14

हमारे पास एक बैच फ़ाइल है जो हमारी एमएसबिल्ड-आधारित बिल्ड प्रक्रिया को आमंत्रित करती है। सिंटेक्स:पावरहेल में बैच स्क्रिप्ट को कॉल करते समय मैं बराबर चिह्न कैसे पास करूं?

build App Target [ Additional MSBuild Arguments ] 

आंतरिक रूप से, यह इस करता है:

msbuild.exe %1.msbuild /t:%2 %3 %4 %5 %6 %7 %8 %9 

कौन सा MSBuild करने के लिए कॉल में परिणाम है कि इस तरह दिखेगा:

 
msbuild.exe App.msbuild /t:Target 

जब किसी भी तर्क बराबर के चिह्न होता है, = , पावरहेल पूरी तरह से इसे हटा देता है। मेरी बैच स्क्रिप्ट इसे कभी नहीं देखती है। यह मानक cmd.exe कमांड प्रॉम्प्ट के साथ नहीं होता है।

उदाहरण के लिए

, अगर मैं फोन

build App Target "/p:Property=Value" 

इस MSBuild करने के लिए क्या पारित हो जाता है:

msbuild.exe App.msbuild /t:Target "/p:Property=Value" 

मैं Powershell भागने की कोशिश की है:

msbuild.exe App.msmbuild /t:Target /p:Property Value 

मैं इस उम्मीद चरित्र, मानक कमांड प्रॉम्प्ट एस्केप कैरेक्टर, और यहां तक ​​कि मैंने जो सामान बनाया है:

build App Target "/p:Property=Value" 
build App Target '/p:Property=Value' 
build App Target /p:Property^=Value 
build App Target /p:Property`=Value 
build App Target /p:Property==Value 

इसमें से कोई भी काम नहीं करता है। बराबर चिह्न प्राप्त करने या निकालने के लिए मैं क्या करूँ?

उत्तर

17

मैं इस पहले देखा है और चाल इसे करने के लिए एक रास्ता मिल गया है बाहर। काश मैं समझ सकता हूं कि विशेष रूप से '=' के साथ क्या चल रहा है लेकिन मैं नहीं कर सकता। अपनी स्थिति में मैं काफी हद तक निश्चित अगर आप MSBuild करने के लिए गुण पास करना चाहते हैं निम्नलिखित काम करेंगे हूँ:

build App Target '"/p:Property=Value"' 

जब गूँजती, इस पैदा करता है निम्नलिखित:

msbuild.exe App.msbuild /t:Target "/p:Property=Value" 
+0

यह काम किया! मैंने सोचा कि मैंने उस संयोजन की कोशिश की है, लेकिन मुझे लगता है कि मैंने केवल एक ही उद्धरण की कोशिश की, दोहरे उद्धरणों के आसपास एकल उद्धरण नहीं। कभी-कभी पावरहेल काफी अजीब हो सकता है। –

+1

समस्या यह है कि PowerShell निष्पादन योग्यों को पारित होने पर तर्कों का उद्धरण नहीं देता है। तो हालांकि PowerShell जानता है कि "/ p: Property = Value" एक स्ट्रिंग है, यह उद्धरण के बिना इसे पास करता है। यह निष्पादन योग्य इसे एक तर्क के रूप में नहीं देख सकता है। मुझे एक तर्क में उद्धरण शामिल करने के साथ एक ही समस्या थी, और मुझे उन्हें बचाना पड़ा। – JasonMArcher

+0

@ जेसनमारर: सहमत हुए, लेकिन यह '=' के साथ अद्वितीय होने लग रहा था क्योंकि इससे बचने से कोई फर्क नहीं पड़ता। इसे आज़माएं और आप देखेंगे। –

0

मुझे नहीं पता कि कोई आसान जवाब है (मुझे नहीं लगता) लेकिन आप cmd.exe को आमंत्रित करने के लिए .Net की प्रक्रिया कक्षा का उपयोग करके समस्या का समाधान कर सकते हैं। यहां एक उदाहरण दिया गया है:

# use .NET Process class to run a batch file, passing it an argument that contains an equals sign. 
# This test script assumes the existence of a batch file "c:\temp\test.bat" 
# that has this content: 
#  echo %1 
#  pause 
$cmdLine = $cmdLine = '/c c:\temp\test.bat "x=1"' 
$procStartInfo = new-object System.Diagnostics.ProcessStartInfo("cmd", $cmdLine) 
$proc = new-object System.Diagnostics.Process 
$proc.StartInfo = $procStartInfo 
$proc.Start(); 
+0

यह काम नहीं करेगा। मेरे प्रश्न में उल्लिखित बैच फ़ाइल को आमंत्रित करना एक लाइन ऑपरेशन होना चाहिए। –

+0

अच्छा, आप इसे एक फ़ंक्शन बना सकते हैं, फिर यह एक-लाइनर हो सकता है। लेकिन मुझे उम्मीद है कि स्कॉट के जवाब wroks। –

0

क्या आपने एक शाब्दिक व्याख्या को बल देने के लिए एकल उद्धरणों का प्रयास किया है?

या: cmd/ग 'MSBuild.exe App.msbuild/टी: लक्ष्य "/ p: संपत्ति = मूल्य"'

+0

हां। मैंने सिंगल कोट्स दिखाने के लिए अपना प्रश्न अपडेट कर लिया है। –

+0

बैच फ़ाइल को आमंत्रित करने से = चिह्न भी गिर जाएगा, हालांकि इस मामले में उद्धरणों में संलग्न होना इसे संरक्षित करने के लिए पर्याप्त है। – yoyo

2

PowerShell 3 के साथ आप उपयोग कर सकते हैं - सामान्य पार्सिंग पावरहेल को रोकने के लिए%।

build --% App Target "/p:Property=Value" 
0

ऐसा लगता है कि डबल-कोट के आसपास केवल एकल-कोट विंडोज वातावरण के आसपास कई परिदृश्यों के लिए सबसे अच्छा हो सकता है। एमएस से निम्नलिखित लिंक बराबर चिह्न http://support.microsoft.com/kb/35938 का समर्थन (या सीमा) दिखाता है यह बैच फ़ाइलों के लिए विशिष्ट है लेकिन यह संभवतः अन्य एमएस शैल उत्पादों को प्रभावित करता है।

संबंधित मुद्दे