18

मैं वीएस को एक विशिष्ट फ़ोल्डर में निर्माण प्रक्रिया के बाद बनाई गई .lib-file को प्रतिलिपि बनाना चाहता हूं। तो मैं परियोजना config, बाद निर्माण घटना के लिए चला गया, और निम्न आदेश दर्ज किया गया:वीएस 2012: पोस्ट बिल्ड xcopy त्रुटि 2

if exist $(TargetPath) 
xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y 

लेकिन बजाय प्रक्रिया कॉपी करने के बाद मैं क्लिक करें "का निर्माण" विफल रहता है और मैं निम्न त्रुटि प्राप्त की:

error MSB3073: The command "if exist C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib xcopy "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\MyNetWorkProject\Debug\IncNetworkLibD.lib" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y

:VCEnd" exited with code 2.

मैं त्रुटि संदेश < की कमांड-स्ट्रिंग में :VCEnd के बारे में भी सोच रहा हूं - शायद यही कारण है? इसे हल कैसे करें?

किसी भी मदद की और संकेत खुशी से भस्म हो जाएगा:) ...

आंशिक समाधान:

संपादित: प्रतीत होता है तरह हिस्सा (z.lib को Inc.lib का नाम बदलने) बनाता है परेशानी, जब xcopy पूछता है कि यह एक फ़ाइल या निर्देशिका है ... यह काम करता है जब मैं मूल रूप से नामित फ़ाइल को प्रतिलिपि

की प्रतिलिपि बनाने की बजाय निर्देशिका में कॉपी करता हूं
+1

अपनी परियोजना फ़ाइल से PostBuildEvent को अपने प्रश्न में कॉपी/पेस्ट करें। इसे संपादित न करें, इसे ठीक उसी तरह दिखें। –

+0

ऐसा लगता है कि नामकरण भाग (z.lib से Inc.lib) परेशानी करता है, जब xcopy गीलेर से पूछता है कि यह एक फ़ाइल या निर्देशिका है ... यह तब काम करता है जब मैं lib-file को किसी नाम के बिना किसी निर्देशिका में कॉपी करता हूं। .. – Incubbus

+1

http://stackoverflow.com/a/4283533/532647 इसे हल करने का एक संभावित तरीका। 'Echo एफ | द्वारा xcopy ... 'आप बस xcopy के लिए' फाइल 'कहेंगे। –

उत्तर

32

Xcopy documentation कहते हैं निम्नलिखित:

निर्दिष्ट गंतव्य एक फ़ाइल या निर्देशिका गंतव्य के लिए एक मौजूदा निर्देशिका शामिल नहीं है तो और बैकस्लैश पर समाप्त नहीं करता है (\), निम्न संदेश प्रकट होता है कि क्या:

Does destination specify a file name 
or directory name on the target 
(F = file, D = directory)? 

यदि आप फ़ाइल या फ़ाइलों को फ़ाइल में प्रतिलिपि बनाना चाहते हैं तो F दबाएं। यदि आप फ़ाइल या फ़ाइलों को निर्देशिका में कॉपी करना चाहते हैं तो डी दबाएं।

आप का उपयोग करके इस संदेश को दबाने कर सकते हैं/मैं कमांड लाइन विकल्प है, जो xcopy ग्रहण करने के लिए कि गंतव्य एक निर्देशिका है अगर स्रोत से अधिक फ़ाइल या एक निर्देशिका है कारण बनता है।

आपको विपरीत की आवश्यकता है, लेकिन ऐसा कोई स्विच नहीं है।

समाधान यहां प्रस्तावित किया गया है: https://stackoverflow.com/a/4283533/532647

यह echo f | उपसर्ग, जो मूल रूप से निम्नलिखित करता है के साथ xcopy आदेश पहले जोड़ें करने के लिए सुझाव दिया है: यह एक उपयोगकर्ता f कुंजी जब xcopy पूछता दबाने simulates।

if exist $(TargetPath) 
echo f | xcopy "$(TargetPath)" "C:\Users\Incubbus\Documents\Visual Studio 2010\My Libraries\z.lib" /Y 

ऑपरेटर | सिर्फ पाइप echo f (== f) के उत्पादन में xcopy आदेश में और यह जब उचित पढ़ने के लिए है:

तो अपने आदेश की तरह दिखना चाहिए। यहां आउटपुट पुनर्निर्देशन के बारे में अधिक जानकारी: http://ss64.com/nt/syntax-redirection.html

अद्यतन: Govert points out के रूप में, इस हैक Windows के स्थानीय संस्करण के तहत काम नहीं करेगा। बहरहाल, एक अन्य हैक काम करेंगे:

xcopy D:\file.zip c:\renamedFile.zip* 

एक तारक * नहीं पूछ कि क्या गंतव्य फ़ाइल या एक निर्देशिका है xcopy बनाता है के साथ गंतव्य फ़ाइल नाम जोड़।

+13

यह विंडोज के स्थानीय संस्करणों के तहत काम नहीं करता है, जहां त्वरित शब्द अलग-अलग हो सकते हैं। एक वैकल्पिक चाल गंतव्य के अंत में तारांकन '*' जोड़ना है, तो xcopy फ़ाइल/निर्देशिका के लिए संकेत नहीं देगा। – Govert

+0

@ अच्छा बिंदु जाओ, धन्यवाद। मैं इसे उत्तर में जोड़ दूंगा। –

+0

xcopy फ़ाइल के रूप में स्रोत और/या लक्ष्य को क्यों पहचानता है जब उनके पास फ़ाइल एक्सटेंशन होता है और तारांकन क्यों काम करता है? @Govert – xr280xr

1

क्या आपने उद्धरणों में $ (TargetPath) को लपेटने का प्रयास किया था? कभी-कभी-लोकप्रिय-स्पेस-कैरेक्टर-अंडरस्कोर-इन-ऑल-एमएस-प्रोडक्ट्स हर कोने में गड़बड़ी करते हैं ... डुनो क्यों उन डंबोस इसे करते रहते हैं ...

पसंद इसलिए: यदि मौजूद है "$ (TargetPath)"

9

आप xcopy की बजाय प्रति का उपयोग क्यों नहीं करते? प्रतिलिपि विशेष रूप से फाइलों के लिए है इसलिए कोई भ्रम नहीं होगा।

+1

बिल्कुल सरल जवाब। धन्यवाद। – Lara

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