2011-02-08 16 views
6

सहित फ़ाइल की प्रतिलिपि बनाएँ, मुझे बैकअप फ़ोल्डर में बड़ी संख्या में फ़ाइलों की प्रतिलिपि बनाने की आवश्यकता है, लेकिन मैं उनके सापेक्ष पथ बनाए रखना चाहता हूं। मुझे केवल विशिष्ट फाइलों की आवश्यकता है; अर्थातइसके सापेक्ष पथ

C:\scripts\folder\File.ext1 
C:\scripts\folder2\file2.ext2 
C:\scripts\file3.ext1 

लेकिन मैं केवल इतना की तरह ext1 फ़ाइलों की प्रतिलिपि की जरूरत है:

C:\backup\folder\File.ext1.bak 
C:\backup\file3.ext1.bak 

स्रोत पथ कई गहराई से कर रहे हैं। यह है कि मैं क्या फ़ाइलों की प्रतिलिपि बनाना है: बैकअप \ \ और रास्तों में से किसी भी प्राप्त करने के लिए प्रकट नहीं होता है:

$files = gci -path C:\scripts\ -recurse -include *.ext1 
$files | % { Copy-Item $_ "$($_).bak"; move-item $_ -destination C:\backup\ } 

यह सिर्फ सी में सभी फाइलों को उदासीनता। सुनिश्चित नहीं है कि वह हिस्सा कैसे किया जाएगा।

उत्तर

6

कुछ इस तरह काम कर सकता था:

gci -path C:\scripts\ -recurse -include *.ext1 | 
    % { Copy-Item $_.FullName "$($_.FullName).bak" 
     move-item $_.FullName -destination ($_.FullName -replace 'C:\\scripts\\','C:\backup\') } 

यह चालाक नहीं है, लेकिन यह जल्दी & गंदा है और प्रयास की एक बहुत बिना काम करता है।

+1

प्रतिस्थापन में 'सी: \ स्क्रिप्ट \' में उन बैकस्लैश को दोगुना करना चाहते हैं। यह एक रेगेक्स है। – mjolinor

+0

बेशक, thx। मैं हमेशा भूल रहा हूँ :) – stej

+0

ऐसा लगता है कि यह काम करेगा। मैं इसे एक शॉट दूंगा और आपको बताएगा कि यह काम करता है या नहीं। – MrGrant

1

आप इस

Clear-Host 
$from = "'C:\scripts\" 
$to = "'C:\backup\" 
$inc = @('*.ext1', '*.extx') 
$files = get-childItem -path $from -include $inc -Recurse 
$files | % {$dest = (Join-Path $to $($_.FullName+".bak").SubString($from.length)); $dum = New-Item -ItemType file $dest -Force; Copy-Item -Path $_ -Destination $dest -Recurse -Force } 

नए आइटम कोशिश कर सकते हैं क्रम पथ निर्माण के लिए मजबूर करने में होती है।

जीन पॉल

2

रोबोकॉपी का उपयोग करें।

robocopy c:\scripts c:\backup *.ext1 /s 

ओह। मैं यह नोटिस करने में असफल रहा कि आप भी .bak एक्सटेंशन जोड़ना चाहते हैं। मैं अब भी लगता है कि यह एक अच्छा विचार है तो फ़ाइलों की प्रतिलिपि बनाने robocopy उपयोग करने के लिए है:

dir c:\backup -recurse -include *.ext1 | % { ren $_ "$_.bak" } 
+1

मैं इसे रोबोकॉपी हां के साथ कर सकता था लेकिन मैं देखना चाहता था कि पूरी तरह से शक्तियों के साथ ऐसा करने का कोई तरीका है या नहीं। – MrGrant

3

मिल-childitem निरपेक्ष पथ देता है, लेकिन आप उन्हें वर्तमान कार्यशील निर्देशिका के सापेक्ष इस प्रकार कर सकते हैं:

resolve-path -relative 

तो रिकर्सिवली एक गंतव्य निर्देशिका के लिए वर्तमान निर्देशिका से फ़ाइलों की फ़िल्टर सेट कॉपी करने के लिए:

$dest = "c:\dest" 
$filter = "*.txt" 

get-childitem -recurse -include $filter | ` 
    where-object { !$_.PSIsContainer } | ` 
    resolve-path -relative | ` 
    % { $destFile = join-path $dest $_; new-item -type f $destFile -force | out-null; copy-item $_ $destFile; get-item $destfile; } 

नए आइटम माता पिता निर्देशिका बनाने के लिए आवश्यक है

get-आइटम सभी नई फ़ाइलों का प्रदर्शन यह

बनाया पाठ्यक्रम robocopy के प्रदान करता है यह सब करता है, लेकिन जब आप अधिक विशेष छानने या फ़ाइल का नाम mangling क्या करना चाहते हैं कई बार हो जाएगा ...

+0

आप '-फाइल' ध्वज को 'get-childitem' पर पास कर सकते हैं और इस प्रकार 'जहां-ऑब्जेक्ट {! $ _। PSIsContainer}' – Polymorphix

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