2009-08-03 27 views
35

मैं एक नौसिखिया हूँ, इसलिए मेरे साथ सहन ...बैच फ़ाइल की प्रतिलिपि फ़ाइलों

मैं सभी .doc फ़ाइलों है कि मैं एक के कई उपनिर्देशिका में फैले हुए है कॉपी करने के लिए कोशिश कर रहा हूँ एक बैच फ़ाइल का उपयोग कर दूसरी निर्देशिका में मुख्य निर्देशिका। मैं सभी फ़ाइलों की एक filelist.txt पाने में कामयाब रहे है इन निर्देशिका है कि मैं का उपयोग कर प्रतिलिपि बनाना चाहते हैं से बाहर (वहाँ सैकड़ों हैं):

"C:\Main directory\sub directory" dir /b /s *.doc > "C:\Main directory\sub directory\filelist.txt"

क्या स्क्रिप्ट मैं एक निर्देशिका में उन xcopy के लिए प्रयोग करेंगे? क्या मैं कुछ कोड का उपयोग कर सकता हूं जो वास्तव में filelist.txt से उन फ़ाइल नामों को पकड़ लेते हैं और उन्हें xcopies?

संदर्भ के लिए, मैंने नीचे दिए गए प्रश्न को देखा क्योंकि ऐसा लगता है कि यह वही कर रहा था जो मैं करना चाहता हूं, लेकिन यह मेरे लिए काम नहीं करता था।

Using xcopy to copy files from several directories to one directory

इसके अलावा, मैं वास्तव में इस अवधारणा को समझने की, तो नीचे कोड तोड़ने कृपया मुझे मुझे बताने की क्या प्रत्येक आइटम करता है, या कम से कम एक कड़ी है कि यह समझा जाएगा शामिल हैं के लिए करना चाहते हैं।

+1

खुला Windows Explorer में मुख्य निर्देशिका कर देगा,, सभी चुनें (Ctrl + ए) और उन्हें नई निर्देशिका में कॉपी/पेस्ट करें ... मैं भी शुरुआत में इसके लिए cmd लाइन पर गया, लेकिन जीयूआई समाधान बहुत तेज़ है :) – Alex

+0

मुझे लगता है कि आप केवल * .doc खोज सकते हैं और परिणामों की प्रतिलिपि बना सकते हैं! – aliqandil

उत्तर

54

एक बैच फ़ाइल समाधान

for /R c:\source %%f in (*.xml) do copy %%f x:\destination\ 

कोड इस तरह के रूप में काम करता है;

निर्देशिका c:\source और उप निर्देशिकाओं /R में प्रत्येक फ़ाइल for कि पैटर्न (\*.xml) गंतव्य x:\\destination\\

प्रत्येक फ़ाइल do प्रतिलिपि फ़ाइल copy %%f के लिए चर %%f में फ़ाइल नाम डाल दिया है, तो मेल खाते के लिए

बस इसे यहां मेरी Windows XP कंप्यूटर पर परीक्षण किया और यह मेरे लिए एक इलाज की तरह काम किया। लेकिन मैंने इसे कमांड प्रॉम्प्ट में टाइप किया, इसलिए मैंने उपरोक्त लिंक किए गए प्रश्न में वर्णित एकल %f परिवर्तनीय नाम संस्करण का उपयोग किया।

+1

यदि एक्सई नाम में रिक्त स्थान हैं तो आप समस्या का समाधान कैसे करेंगे? – Euclid

+1

@Euclid मेरे सिर के ऊपर से मैं रिक्त स्थान –

+3

रिक्त स्थान की रक्षा के लिए अंतिम %% f को '%% f' में बदल दूंगा। फ़ोल्डर्स को बनाए रखने के दौरान हम यह कैसे करेंगे? उदाहरण: फ़ाइलों को उनके फ़ोल्डर के नाम और पेड़ संरचना में रखें – codeshark

6

इन चीजों की वजह से मैंने पावरहेल पर स्विच किया।

Get-ChildItem -Recurse -Include *.doc | % { 
    Copy-Item $_.FullName -destination x:\destination 
} 
+6

आप वास्तव में केवल 'gci -rec -inc * .doc कर सकते हैं। सीपी -डेस्ट एक्स: \ गंतव्य 'चूंकि' कॉपी-आइटम 'पाइपलाइन इनपुट स्वीकार करता है। इसके अलावा आप शायद 'गेट-चाइल्डइटम' से पूरी तरह से छुटकारा पा सकते हैं और 'कॉपी-आइटम-रीकर्स- शामिल करें * .doc -Destination C: \ Destination'' कॉपी-आइटम' के बाद से 'रिकर्स' और 'शामिल करें' भी। – Joey

+0

क्या यह सबफ़ोल्डर संरचना को बनाए रखता है? ऐसा नहीं लगता है –

+1

@ जॉय पहला सुझाव काम किया, दूसरा पूछा "* निम्नलिखित मानकों के लिए आपूर्ति मूल्य: *"। रिकर्स को समाप्त करने की कोशिश की, फिर 'गेट-हेल्प कॉपी-आइटम-डिलीटेड' पर ध्यान देना शुरू किया, फिर फैसला किया कि मुझे बस अपना पहला सुझाव आज़माएं। ;) – ruffin

1

आप भी उपयोग कर सकते हैं VBScript

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFolder = "c:\test" 
strDestination = "c:\tmp\" 
Set objFolder = objFS.GetFolder(strFolder) 

Go(objFolder) 

Sub Go(objDIR) 
    If objDIR <> "\System Volume Information" Then 
    For Each eFolder in objDIR.SubFolders  
     Go eFolder 
    Next 
    For Each strFile In objDIR.Files 
     strFileName = strFile.Name 
     strExtension = objFS.GetExtensionName(strFile) 
     If strExtension = "doc" Then 
      objFS.CopyFile strFile , strDestination & strFileName 
     End If 
    Next  
    End If 
End Sub 

, छोटा और प्रभावी mycopy.vbs के रूप में सहेजें और कमांड लाइन

c:\test> cscript /nologo mycopy.vbs 
4

ब्रैंडन पर: यह आज़माएं, यह मजेदार है। भी लचीला।

set dSource=C:\Main directory\sub directory 
set dTarget=D:\Documents 
set fType=*.doc 
for /f "delims=" %%f in ('dir /a-d /b /s "%dSource%\%fType%"') do (
    copy /V "%%f" "%dTarget%\" 2>nul 
) 

उम्मीद है कि इससे मदद मिलती है।

मैं प्रतिलिपि के बाद कुछ चेक जोड़ता हूं ('||' का उपयोग करके) लेकिन मुझे यकीन नहीं है कि "कॉपी/वी" प्रतिक्रिया करता है जब यह किसी त्रुटि का सामना करता है।

आप इस की कोशिश करना चाहते हो सकता है:

copy /V "%%f" "%dTarget%\" 2>nul|| echo En error occured copying "%%F".&& exit /b 1 

प्रति लाइन के रूप में। अगर आपको इससे कुछ मिलता है तो मुझे बताएं (प्रतिलिपि विफलता का परीक्षण करने की स्थिति में ..)

33

बस * .doc के लिए खोज पुनरावर्ती विकल्प के साथ XCOPY आदेश का उपयोग

xcopy c:\*.doc k:\mybackup /sy 

/एस यह "पुनरावर्ती"

+4

यह मेरा दिन बना दिया। आपका बहुत बहुत धन्यवाद! – degot

+4

लेकिन यदि फ़ाइल में 'c:' का सबफ़ोल्डर है, तो यह सबफ़ोल्डर और '.doc' फ़ाइल की प्रतिलिपि बनाता है .... फ़ाइल के बजाय सबफ़ोल्डर – ron

+0

के बिना फ़ाइल को भी अपना दिन बना दिया। धन्यवाद। – Govinda