टीम-बिल्ड बिल्ड में कोड 2 के साथ कभी-कभी पोस्ट-बिल्ड स्टेप (xcopy) क्यों निकल जाएगा?


93

मेरे क्लाइंट के समाधान में कुछ प्रोजेक्ट्स में पोस्ट-बिल्ड ईवेंट है: xcopyएक विशिष्ट फ़ोल्डर में बिल्ड आउटपुट। स्थानीय स्तर पर निर्माण के समय यह ठीक काम करता है। हालाँकि, TeamCity में, मुझे कभी-कभी मिलता है

xcopy [...] कोड 2 के साथ बाहर निकल गया

यदि मैं नियमित रूप से उपयोग करता हूं copy, तो यह कोड 1 से बाहर निकलता है। मुझे उम्मीद है कि फ़ाइल लॉक के साथ इसका कुछ करना है, हालांकि कॉपी की जा रही विशिष्ट फाइलें समान नहीं हैं, इसलिए शायद केवल साझा गंतव्य निर्देशिका पर लॉक करना है। मैं /yओवरराइटिंग फ़ाइलों पर संकेत नहीं देने के लिए उपयोग करता हूं ।

यह TeamCity में विफल क्यों है, लेकिन स्थानीय रूप से नहीं?


मेरे पास समान मुद्दे थे, लेकिन समान फ़ाइल को समान रूप से कॉपी करने से संबंधित था। क्या आप दोहरा सकते हैं कि कोई फ़ाइल दो बार कॉपी नहीं की गई है?
इग्नासियो सोलर गार्सिया

4
बाहर निकलें कोड 2 का मतलब है The user pressed CTRL+C to terminate xcopy। हेहे।
हंस पसंत

@SoMoS हां, कॉपी की जा रही फाइलें निश्चित रूप से अलग हैं।
टिम इल्स

@ हंसपसंद मुझे नहीं पता कि टीमसिटी मुझ पर CTRL + C क्यों दबाना चाहेगी! :(
टिम इल्स

5
याह, मुझे भी नहीं। अन्य आम सम्मेलन यह है कि निकास कोड अंतिम विंडोज त्रुटि या अपवाद के बराबर है। त्रुटि 2 का अर्थ है "फ़ाइल नहीं मिली"। जो निश्चित रूप से बहुत अधिक समझ में आता है।
हंस पैसेंट

जवाबों:


147

यहां तक ​​कि अगर आप /Yxcopy के साथ स्विच प्रदान करते हैं , तब भी आपको एक त्रुटि मिलेगी जब xcopy को नहीं पता होगा कि आप जिस चीज़ की प्रतिलिपि बना रहे हैं वह एक फ़ाइल या निर्देशिका है। यह त्रुटि "कोड 2 के साथ बाहर निकली" के रूप में दिखाई देगी। जब आप कमांड प्रॉम्प्ट पर एक ही xcopy चलाते हैं, तो आप देखेंगे कि xcopy फ़ाइल या निर्देशिका की प्रतिक्रिया के लिए पूछ रहा है।

एक स्वचालित बिल्ड के साथ इस समस्या को हल करने के लिए, आप पाइप के साथ पूर्व-परिभाषित प्रतिक्रिया में गूंज सकते हैं।

यह कहने के लिए कि आप जिस चीज की नकल कर रहे हैं वह एक फाइल है, इसमें गूंजें F:

echo F|xcopy /y ...

आपके द्वारा कॉपी की जा रही बात कहने के लिए एक निर्देशिका है, इसमें गूंजें D:

echo D|xcopy /y ...

कभी-कभी उपरोक्त को xcopy के बजाय कॉपी कमांड का उपयोग करके हल किया जा सकता है:

copy /y ...

हालांकि, अगर कोई गैर-मौजूद निर्देशिका अंतिम फ़ाइल गंतव्य तक जाती है, तो "कोड 1 के साथ बाहर" हो जाएगा।

याद रखें: /Cसावधानी के साथ स्विच और xcopy का उपयोग करें ।


साभार @Metro Smurf मैं परीक्षण नहीं कर सकता कि क्या इससे मेरी समस्या हल हो गई होगी, लेकिन आप जो कहते हैं वह मुझे बहुत अच्छा लगता है इसलिए मैंने इसे उत्तर के रूप में चिह्नित किया है। चीयर्स!
टिम इल्स

मैं ठीक उसी समस्या में चल रहा था और आखिरकार प्रतिक्रिया में पाइपिंग के साथ समाप्त हो गया। उम्मीद है कि यह लंबे समय में किसी और की मदद करेगा।
मेट्रो स्मर्फ

1
"यह विंडोज के स्थानीयकृत संस्करणों के तहत काम नहीं करता है, जहां शीघ्र शब्द अलग हो सकते हैं। एक वैकल्पिक चाल गंतव्य के अंत में एक तारांकन चिह्न जोड़ने के लिए है, फिर xcopy फ़ाइल / निर्देशिका के लिए संकेत नहीं देगा। 28 को 19:40 "तो, आप इस तरह की प्रति इको डी (जो विश्वसनीय नहीं है) के बिना कर सकते हैं: XCOPY $ (प्रोजेक्टडायर) .. \ स्क्रिप्ट * $ (लक्ष्यडायर) स्क्रिप्ट * / Y / R। या कॉपी इस तरह से करें बिना इको F: XCOPY D: \ file.zip c: \ renamedFile.zip / Y / R
leetNightshade

@leetNightshade - *निर्देशिका के साथ भी काम करेगा ? या यह सिर्फ फाइलों के लिए है?
मेट्रो स्मरफ

@MetroSmurf Hm, लगता है कि मेरे उदाहरण का प्रारूपण विफल हो गया है, वहाँ बैकस्लैश गायब हैं (मैंने सोचा होगा कि मैं एक प्रतीक से बचने की कोशिश कर रहा था) और तारांकन गायब। लेकिन हाँ, यह निर्देशिका और फ़ाइलों के साथ काम करता है। यहाँ शासन के उत्तर की लिंक है: stackoverflow.com/a/14022309/353094
leetNightshade

37

मैंने अपने पथ के अंत में एक त्रुटि जोड़कर त्रुटि कोड 2 तय किया, इसके बिना, xcopy को लगता है कि यह एक फ़ोल्डर के बजाय एक फ़ाइल है।


3
बस। विंडोज 7, विजुअल स्टूडियो 2013 पर ठीक काम किया। बहुत बहुत धन्यवाद!
चार्ल्स

33

यदि आप पोस्ट बिल्ड इवेंट में xcopy का उपयोग कर रहे हैं, तो / C के अलावा / Y स्विच का उपयोग करें।

/C           Continues copying even if errors occur.
/Y           Suppresses prompting to confirm you want to overwrite an existing file.

4
बहुत आसन! /Yशीघ्र दबा देता है! यह खोजना इतना कठिन क्यों था?
साउथशोरक

3
/ Y ओवरराइट प्रॉम्प्ट को दबाता है, लेकिन यह एक कोड 2 का एकमात्र कारण नहीं है। RTFM आपको यह नहीं बताएगा कि उनके कारण क्या होता है।
MSalters

2

इस समस्या के लिए मेरा लक्ष्य लक्ष्य बिन फ़ोल्डर में जाना था, और यह सुनिश्चित करना था कि वहां उचित सबफ़ोल्डर मौजूद है। एक बार जब सबफ़ोल्डर मैन्युअल रूप से बनाया गया था, तो निर्माण प्रक्रिया सफलतापूर्वक पूरी हुई।


2

copyयह मेरे लिए तय किया। xcopy with /c /yकाम नहीं किया। मुझे एक निकास 4 मिल रहा था इसलिए मैं साथ गया था xcopy, लेकिन निकला मुझे आसपास के उद्धरणों की आवश्यकता थी ($TargetPath)

मेरी स्क्रिप्ट:

if $(ConfigurationName) == Debug copy "$(TargetPath)" "$(SolutionDir)\Folder\bin\Debug\$(TargetFileName)"

2

शायद आप git के साथ TeamCity का उपयोग कर रहे हैं। यदि हाँ, तो जाँचें कि आप जिन फ़ोल्डर को कॉपी करना चाहते हैं, वे git रिपॉजिटरी में मौजूद हैं। आमतौर पर खाली प्रोजेक्ट फ़ोल्डर को रिपॉजिटरी में जोड़ने के लिए एवियोड होता है, इसलिए xcopyइसे खोजने में विफल रहता है और एक त्रुटि उत्पन्न करता है।

आप खाली फ़ोल्डर में कुछ खाली पाठ फ़ाइल जोड़ सकते हैं, प्रतिबद्ध कर सकते हैं और देख सकते हैं कि फ़ोल्डर रिपॉजिटरी में दिखाई देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.