ओवरराइट के बिना फ़ाइलों की प्रतिलिपि बनाएँ


99

मैं बस कहने के लिए कमांड लाइन पर एक रास्ता खोजने के लिए प्रतीत नहीं कर सकता हूं "निर्देशिका ए से निर्देशिका बी तक सभी फाइलों को कॉपी करें, लेकिन अगर फ़ाइल पहले से ही निर्देशिका बी में मौजूद है, तो इसे अधिलेखित न करें, कोई फर्क नहीं पड़ता कि कौन सी फ़ाइल नई है , और मुझे संकेत मत करो।

मैं कॉपी, मूव, xcopy और रोबोकॉपी के माध्यम से गया हूं, और मुझे जो निकटतम मिल सकता है वह यह है कि आप robocopy "A को B में कॉपी कर सकते हैं, लेकिन पुरानी फ़ाइलों के साथ नई फ़ाइलों को अधिलेखित न करें," लेकिन यह मेरे लिए काम नहीं करता है । मैंने xxcopy को देखा, लेकिन इसे छोड़ दिया, क्योंकि मैं नहीं चाहता कि विज़ुअल स्टूडियो पोस्ट-बिल्ड इवेंट पर एक तृतीय-पक्ष निर्भरता हो, जिसे अन्य SVN उपयोगकर्ताओं को बिल्ड करने के लिए उस उपकरण को स्थापित करने की आवश्यकता होगी।

मैं Visual Studio 2010 में पोस्ट-बिल्ड ईवेंट के लिए एक कमांड लाइन जोड़ना चाहता हूं ताकि नए EF मॉडल ऑब्जेक्ट के लिए T4 टेम्प्लेट से उत्पन्न होने वाली फाइलें प्रोजेक्ट फ़ोल्डर को वितरित की जाएं, जिसमें वे संबंधित हैं, लेकिन मौजूदा ऑब्जेक्ट के लिए पुनर्जीवित फाइलें संभावित रूप से संपादित गंतव्य फ़ाइलों को अधिलेखित न करें।

चूंकि T4 टेम्पलेट पुन: उत्पन्न होता है, स्रोत फ़ाइल हमेशा नई होती है, और मैं "नए" स्विच का मज़बूती से उपयोग नहीं कर सकता, मुझे नहीं लगता।

मैं उन वस्तुओं के लिए आंशिक कक्षाओं का उपयोग करता हूं जिनके लिए मैं कर सकता हूं, लेकिन ऐसी अन्य चीजें हैं जो मैं उत्पन्न करता हूं जो कि आंशिक कक्षाओं का उपयोग नहीं कर सकते हैं (जैसे एक डिफ़ॉल्ट EditorTemplate या DisplayTemplate * .ascx फ़ाइल उत्पन्न करना)।

किसी को भी किसी भी इसी तरह की समस्याओं को हल किया है?


आप के साथ परिचित हैं cmd.exeके forआदेश? यदि नहीं, तो मैं आपको चलाने for /?और उपयोग करने की सलाह देता हूं ।
गाबे

जवाबों:


38
For %F In ("C:\From\*.*") Do If Not Exist "C:\To\%~nxF" Copy "%F" "C:\To\%~nxF"

5
यह मेरे लिए काम करता है, लेकिन मुझे एक के बजाय दो प्रतिशत प्रतीकों का उपयोग करना था क्योंकि मैं इसे कमांड लाइन के बजाय एक बैच फ़ाइल के अंदर से चला रहा था। मैंने% F के उदाहरणों को% F के साथ बदल दिया और% ~ nxF के उदाहरणों को %% ~ nxF के साथ बदल दिया।
ओवेन

1
वास्तव ~nxमें क्या %~nxFमतलब है?
सर्ज रोजैग

@stu, यह केवल कहता है कि ~nxFचर के लिए Fएक फ़ाइल नाम और एक एक्सटेंशन में बदल जाता है।
सर्ज रोजैग

हां, इतनी प्रभावी रूप से, मुझे फ़ाइलनाम + एक्सटेंशन दें, पथ के बिना - जो कि आपको लक्ष्य फ़ोल्डर में परीक्षण करने और लक्ष्य फ़ाइल नाम निर्दिष्ट करने की आवश्यकता है। मुद्दा यह है कि% F में पथ शामिल है, और आप इसे वहां नहीं चाहते हैं।
स्टु

207

Robocopy , या "Robust File Copy", एक कमांड-लाइन डायरेक्टरी प्रतिकृति कमांड है। यह विंडोज एनटी 4.0 के साथ शुरू होने वाले विंडोज रिसोर्स किट के हिस्से के रूप में उपलब्ध है, और इसे विंडोज विस्टा, विंडोज 7 और विंडोज सर्वर 2008 के मानक फीचर के रूप में पेश किया गया था।

   robocopy c:\Sourcepath c:\Destpath /E /XC /XN /XO

विस्तृत करने के लिए (हाइड्रार्यग्रम, हैलग्लाक्सार और एंडी श्मिट के जवाबों का उपयोग करके):

  • /E रोबोकॉपी पुनरावर्तनीय उपनिर्देशिकाओं की प्रतिलिपि बनाता है, जिसमें खाली शामिल हैं।
  • /XCएक ही टाइमस्टैम्प के साथ मौजूदा फ़ाइलों को बाहर करता है, लेकिन विभिन्न फ़ाइल आकार। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।
  • /XNगंतव्य निर्देशिका में प्रतिलिपि की तुलना में नई मौजूदा फ़ाइलों को शामिल नहीं किया गया है। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।
  • /XOगंतव्य निर्देशिका में प्रतिलिपि की तुलना में पुरानी फ़ाइलों को शामिल नहीं करता है। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।

परिवर्तित, पुराने और नए वर्गों को छोड़कर, रोबोकॉपी वही करता है जो मूल पोस्टर चाहता है - बिना स्क्रिप्टिंग वातावरण को लोड किए बिना।

संदर्भ: तकनीक , विकिपीडिया
डाउनलोड से: Microsoft डाउनलोड लिंक (लिंक अंतिम 30 मार्च 2016 को सत्यापित)


'बहिष्कृत' से क्या आपका मतलब 'छोड़ना' या 'हटाना / हटाना' है?
हवाई

@Andre टेरा: छोड़ें, सामान्य रूप से। यदि आप / MIR ध्वज का उपयोग कर रहे हैं, तो यह उन्हें हटा सकता है। मैंने उसका परीक्षण नहीं किया है।
hydrargyrum

/ MIR के साथ, स्रोत में मौजूद फाइलें वास्तव में हटा दी जाती हैं। लेकिन जब / XN और / XO का उपयोग करते हैं, तो दोनों स्थानों में मौजूद फाइलें बस छोड़ी जाती हैं (यह सुनिश्चित नहीं है कि आकार की जाँच की गई है)। यह मेरी स्थिति के लिए आदर्श है, जहाँ मुझे अपने आवेदन के नए या पुराने संस्करण की प्रतिलिपि बनाने की आवश्यकता है, लेकिन जहाँ पुस्तकालयों के अनुप्रयोग का उपयोग किए गए दिनांकित स्टैम्प गलत हैं फिर भी फ़ाइल नामों में स्वयं ही उनका संस्करण संख्या समाहित है।
हेन्नो वर्म्यूलेन

क्या इसे शामिल करना आवश्यक है /e? अगर आप /sइसके बजाय उपयोग करते हैं तो क्या होगा ? मुझे खाली उप-फ़ोल्डरों का एक गुच्छा नहीं चाहिए।
Arete

48

बेलिसियस का समाधान अच्छा है।

उस थोड़े से उत्तर पर विस्तार से बताएं:

  • /E रोबोकॉपी पुनरावर्तनीय उपनिर्देशिकाओं की प्रतिलिपि बनाता है, जिसमें खाली शामिल हैं।
  • /XCएक ही टाइमस्टैम्प के साथ मौजूदा फ़ाइलों को बाहर करता है, लेकिन विभिन्न फ़ाइल आकार। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।
  • /XNस्रोत निर्देशिका में प्रतिलिपि की तुलना में नई मौजूदा फ़ाइलों को शामिल नहीं करता है। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।
  • /XOस्रोत निर्देशिका में प्रतिलिपि की तुलना में पुरानी फ़ाइलों को शामिल नहीं करता है। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।

परिवर्तित, पुराने और नए वर्गों को छोड़कर, रोबोकॉपी वही करता है जो मूल पोस्टर चाहता है - बिना स्क्रिप्टिंग वातावरण को लोड किए बिना।


46

आप यह कोशिश कर सकते हैं:

echo n | copy /-y <SOURCE> <DESTINATION>

-yबस ओवरराइटिंग से पहले संकेत देता है और हम उन सभी प्रश्नों के लिए n को पाइप कर सकते हैं। तो यह केवल गैर-मौजूदा फ़ाइलों की प्रतिलिपि बनाने में होगा। :)


2
सुंदर सरल।
होल्फ

6
जब हम केवल एक बार पाइप करते हैं तो सभी सवालों का जवाब क्यों देता है?
फुलेवव

बहुत बढ़िया, मैं इस विकल्प के साथ गया। पाइपिंग के बारे में सोचने से पहले, मैं एक पैरामीटर के लिए googled, मुझे लगा कि मैं गायब था और फिर मैं इस पृष्ठ पर आया। इस समाधान को आज़माते हुए मैंने देखा कि पाइपिंग करते समय, कॉपी जाहिरा तौर पर / Y पैरामीटर को सक्षम करता है, इसीलिए इसे / -Y जोड़ा जाना चाहिए।
एंड्रयू

2
@phuclv ऐसा लगता है copy /-yकि स्वचालित रूप से माना जाता है कि इनपुट से एक बार भी स्टड नहीं चलता है। आप इसमें पहले स्पष्ट n, या पाइप < nulको छोड़ सकते हैं , और वही काम होता है।
mwfearnley

6

यहाँ यह बैच फ़ाइल रूप में है:

@echo off
set source=%1
set dest=%2
for %%f in (%source%\*) do if not exist "%dest%\%%~nxf" copy "%%f" "%dest%\%%~nxf"

3

मैं केवल अपने स्वयं के परीक्षण से कुछ स्पष्ट करना चाहता हूं।

@Hydrargyrum ने लिखा:

  • / XN मौजूदा फ़ाइलों को स्रोत निर्देशिका में प्रतिलिपि की तुलना में नया शामिल नहीं करता है। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।
  • / XO स्रोत निर्देशिका में प्रतिलिपि की तुलना में पुरानी फ़ाइलों को शामिल नहीं करता है। रोबोकॉपी आम तौर पर उन लोगों को अधिलेखित करता है।

यह वास्तव में पीछे की ओर है। XN "eXclude Newer" फ़ाइलों को करता है, लेकिन यह उन फ़ाइलों को बाहर करता है जो गंतव्य निर्देशिका में प्रतिलिपि की तुलना में नई हैं । XO "eXclude Older" करता है, लेकिन यह उन फ़ाइलों को बाहर करता है जो गंतव्य निर्देशिका में कॉपी से अधिक पुरानी हैं ।

निश्चित रूप से हमेशा की तरह अपना परीक्षण करें।


1
क्या यह मूल प्रश्न का उत्तर है, या किसी और के उत्तर पर टिप्पणी है?
ASGM

1
क्या हाइड्रार्जियम का उत्तर मूल प्रश्न का उत्तर लिखने के समय के रूप में 5.2 वोट है, या किसी और के उत्तर पर टिप्पणी है?
मो।

3

Xcopy के साथ ऐसा करने का एक अजीब तरीका है:

echo nnnnnnnnnnn | xcopy /-y source target

बस कई n के रूप में शामिल कर रहे हैं फ़ाइलों के रूप में आप कॉपी कर रहे हैं, और यह उत्तर के लिए सभी अधिलेखित सवालों के जवाब देंगे।


इस उत्तर के बारे में copy, विशेष रूप से @mwfearnley टिप्पणी देखें: स्टड समाप्त होने के बाद स्वचालित रूप से मान लिया जाता है, इसलिए आप केवल एक बार ईजी कर सकते हैं और यह अभी भी काम करता है। copy /-ynecho n
रासना

3
robocopy src dst /MIR /XX

/ XX: eXclude "eXtra" फाइलें और डायर (गंतव्य में मौजूद लेकिन स्रोत नहीं)। यह गंतव्य से किसी भी विलोपन को रोक देगा। (यह डिफ़ॉल्ट है)


1

रोबोकॉपी को यहां उन सिस्टमों के लिए डाउनलोड किया जा सकता है जहां यह पहले से इंस्टॉल नहीं है। (यानी विंडोज सर्वर 2003.)

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17657 (स्थापना के लिए आवश्यक कोई रिबूट नहीं)

याद रखें कि रोबोकॉपी के लिए अपना रास्ता तय करें। आप "मेरे कंप्यूटर"> गुण> उन्नत> "पर्यावरण चर" पर राइट क्लिक करके ऐसा करते हैं, फिर पथ सिस्टम चर ढूंढें और इसे अंत में जोड़ें: "; C: \ Program Files \ Windows संसाधन Kits \ Tools" या जहाँ भी आप हैं इसे स्थापित किया। पथ चर स्ट्रिंग को छोड़ना सुनिश्चित करें जो पहले से ही वहां हैं और बस अतिरिक्त पथ को जोड़ते हैं।

एक बार रास्ता तय करने के बाद, आप उस कमांड को चला सकते हैं जो कि बेलिसरियस सुझाता है। यह बहुत अच्छा काम करता है।


1

यह मुझे सीधे गलत संदेशों पर टिप्पणी नहीं करने देगा - लेकिन मुझे सिर्फ सभी को चेतावनी दें, कि पिछले संदेशों में पोस्ट किए गए संदेशों की तुलना में / XN और / XO विकल्पों की परिभाषा की समीक्षा की गई है।

बहिष्कृत पुरानी / नई फ़ाइलों का विकल्प रोबोकोपी के लॉगिंग में प्रदर्शित जानकारी के अनुरूप है: रोबोकोपी SOURCE के माध्यम से पुनरावृत्ति करेगा और फिर रिपोर्ट करेगा कि SOURCE में प्रत्येक फ़ाइल गंतव्य में मौजूद फ़ाइल की तुलना में "OLDER" या NEWER है।

नतीजतन, / XO OLDER SOURCE फ़ाइलों को छोड़ देगा (जो कि सहज है), "स्रोत से अधिक पुरानी नहीं" जैसा कि यहां दावा किया गया था।

यदि आप केवल नई या बदली गई स्रोत फ़ाइलों को कॉपी करना चाहते हैं, लेकिन अधिक हाल की गंतव्य फ़ाइलों को बदलने से बचें, तो / XO उपयोग करने के लिए सही विकल्प है।


0

दो निर्देशिकाओं को प्रतिबिंबित करने के लिए / MIR विकल्प का उपयोग करने के लिए एक सरल तरीका होगा। मूल रूप से यह गंतव्य के लिए केवल नई फ़ाइलों की नकल करेगा। अगले कॉमैंड में स्रोत और गंतव्य को अपने फ़ोल्डरों के पथ के साथ बदलें, स्क्रिप्ट किसी भी एक्सटेंशन के साथ किसी भी फ़ाइल की खोज करेगी।

robocopy <source directory> <destination directory> *.* /MIR

0

मेरे लिए यही काम किया है। मैं इसे अन्य ड्राइव पर "जोड़ने" फ़ाइलों का उपयोग करता हूं, जिसमें कोई ओवरराइट नहीं है।

बैच फ़ाइल: robocopy-लापताfiles.bat

@echo off
echo Copying 
echo      "%1"
echo   to "%2"
echo.
echo Press Cntr+C to abort
Pause
echo.
@echo on
robocopy %1 %2 /Xo /XN /XC /J /SL /S /MT:8 /R:1 /W:1 /V /DCOPY:DAT /ETA /COPY:DATO /FFT /A-:SH /XD $RECYCLE.BIN "System Volume Information"

उदाहरण:

robocopy-missingfiles.bat f:\Working-folder\ E:\Backup-folder\

कार्यान्वयन से पहले परीक्षण करें।

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