2011-12-31 10 views
7

यहाँ करने के लिए फ़ोल्डर सामग्री की प्रतिलिपि कुछ कोड मैं :)Robocopy एक ही फ़ोल्डर

@echo off 
set source="R:\Contracts\" 
set destination="R:\Contracts\Sites\" 
ROBOCOPY %source% %destination% *.srt *.pdf *.mp4 *.jpg /COPYALL /R:0 /S 
for /r %source in (*) do @copy "%destination" . 

आर बनाया है।

मैं सभी को आर: \ Contracts \ साइट्स \ पर कॉपी करना चाहता हूं और फ़ोल्डर संरचना को फ़्लैट करना चाहता हूं।

सब कुछ अच्छी तरह से कॉपी करता है लेकिन फ़ोल्डर संरचना भी।

धन्यवाद

+0

संभावित डुप्लिकेट [रोबोकॉपी के साथ सभी फ़ोल्डरों को छोड़ने वाले फ़ोल्डर पेड़ से फ़ाइलों की प्रतिलिपि कैसे करें?] (Http://stackoverflow.com/questions/1502170/how-to-copy-files-from-folder-tree-dropping -ल-फ़ोल्डर्स-साथ-रोबोकॉपी) –

उत्तर

9

कोई भी आदेश आप के लिए पदानुक्रम समतल जाएगा; आपको एकाधिक कमांड का उपयोग करना होगा। इसे पदानुक्रम पर चलने के लिए केवल/आर का उपयोग करके किया जा सकता है, जिसमें आपकी प्रतिलिपि/चाल के विकल्प (चाल, प्रतिलिपि, xcopy, robocopy) के साथ मिलकर किया जा सकता है। चूंकि आपका गंतव्य स्रोत पदानुक्रम के भीतर है, इसलिए गंतव्य को स्रोत होने से रोकने के लिए आपको एक आईएफ की आवश्यकता है।

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

यहां आपके ROBOCOPY आदेश को FOR/R समाधान के साथ एकीकृत किया गया है।

@echo off 
set source="R:\Contracts" 
set destination="R:\Contracts\Sites" 

::Not sure if this is needed 
::It guarantees you have a canonical path (standard form) 
for %%F in (%destination%) do set destination="%%~fF" 

for /r %source% %%F in (.) do if "%%~fF" neq %destination% ROBOCOPY "%%F" %destination% *.srt *.pdf *.mp4 *.jpg /COPYALL /R:0 
+0

हैलो डबेंहम, सबसे पहले, आपको बहुत बहुत धन्यवाद। मैंने उपर्युक्त कोड की कोशिश की है हालांकि यह काम नहीं कर रहा है। मैंने बैच फ़ाइल बनाई है और इसका परीक्षण किया है। मैं कोड के माध्यम से किया गया है और कोई सीधी गलती नहीं देख सकता। कृपया मुझे बताओ। धन्यवाद – Arthor

+0

हैलो, मैंने इस पंक्ति को हटा दिया है "%% F में (% गंतव्य%) गंतव्य ="% ~ एफएफ "सेट करते हैं और ऐसा लगता है। हालांकि मुझे यकीन नहीं है कि इसकी आवश्यकता है या नहीं। यदि धन्यवाद धन्यवाद DBENHAM – Arthor

+0

ओह - मुझे उस पंक्ति के अंत में एक% गुम था। यह अभी तय है। इसका उद्देश्य यह सुनिश्चित करना था कि पथ को पूरी तरह से योग्य, मानक रूप में दर्शाया गया था ताकि बाद वाला IF कथन ठीक से काम कर सके। – dbenham

0

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

C: \ फ़ाइलें \ somefiles \ file.txt

C: \ फ़ाइलें \ otherfiles \ file.txt

गंतव्य C: \ newdir \ फ़ाइलों

रूप में बनाया जाता 210

C: \ newdir \ somefiles-file.txt

C: \ newdir \ otherfiles-file.txt

यहाँ

कोड, बैच फ़ाइल 1 फ़ाइलों के माध्यम से चला जाता है है, बैच फ़ाइल 2 नाम बदलता है और उन्हें (चाल भी बजाय नकल कर सकता है, यदि आप स्रोत सुरक्षित रखना चाहते हैं:

@echo off 
for /r %%f in (*.*pr) do @renameandmovefilespart2.bat "%%f" "%%~ff" "%%~xf" 

renameandmovefilespart2.bat

@echo off 
Setlocal EnableDelayedExpansion 
rem set the whole file path 
set origWhole=%1 
set origPathOnly=%2 
set extension=%3 
rem here you can set where the directory to hold the flattened hierarchy is 
set destDir=c:\destinationDir\ 
rem set the directory to do a string replace 
rem make this the starting directory, that you dont want in the newly renamed files 
set startingDir=C:\starting\directory\ 
set nothing= 
set slash=\ 
rem here you can set what the character to represent the directory indicator \ in the new files 
set reaplcementDirectoryCharacter=-- 
set quote=" 
rem cut out the starting part of the directory 
call set newname=%%origWhole:!startingDir!=!nothing!%% 
rem replace slashes with new character 
call set newname=%%newname:!slash!=!reaplcementDirectoryCharacter!%% 
rem remove quotes 
call set newname=%%newname:!quote!=!nothing!%% 
rem @echo shortened: %newname% 
rem @echo source path: %origPathOnly% newPath: %startingDir% 
rem @echo extension: %extension% 
rem rename the files 
ren %origWhole% %newname% 
rem prepare to move the file, clean up the source path 
call set origPathOnly=%%origPathOnly:!quote!=!nothing!%% 
move "%origPathOnly%%newname%" "%destDir%" 
7

आप पावरशेल एक लाइनर के साथ ऐसा कर सकते हैं। इस उदाहरण में मैं सभी सबफ़ोल्डर से .txt एक्सटेंशन के साथ सभी फ़ाइलों को फ़िल्टर करता हूं। और फिर उन्हें मूव-आइटम सीएमडीलेट पर भेजें।

सीएमडीलेट्स गेट-चाइल्डिटम (लघु अवधि के लिए जीसीआई), -कर्स, मैबी-फिल्टर को मिलाएं और फिर परिणाम को मूव-आइटम सीएमडीलेट में पाइप करें। उपयोग करें- अगर पहली बार यह जांचने के लिए कि आउटपुट आपको अपेक्षित है।

वर्तमान फ़ोल्डर

get-Childitem -recurse -filter *.txt | Move-Item -WhatIf 

स्थानांतरित करने के लिए ले जाएँ किसी अन्य फ़ोल्डर

get-Childitem -recurse -filter *.txt | Move-Item -Destination c:\temp -WhatIf 
+0

शानदार। सरल, समझने में आसान है। – sonjz

0

को एक पुराने PCMag उपयोगिता है कि वर्तमान और उप-निर्देशिका के समान आदेश काम कर सकते हैं Sweep.exe कहा जाता है नहीं है। मैं गंतव्य निर्देशिका की उपनिर्देशिका के रूप में गंतव्य नहीं डालूंगा। गंतव्य कहीं और रखो।

http://www.rarewares.org/files/case/Sweep.zip

cd c:\contracts sweep copy *.* c:\sites

यह ग से सब कुछ कॉपी करेंगे: \ अनुबंध और ग के नीचे: \ साइटों

मैं एक ऐसी ही आदेश का उपयोग एक निर्देशिका के पदानुक्रम समतल।

डुप्लिकेट के साथ सावधानी बरतें और आप उन्हें कैसे संभालना चाहते हैं। क्या आप एक अलग तरीके से अधिलेखित या संभालना चाहते हैं।

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