2010-10-13 15 views
5

के साथ सरणी में परिभाषित फ़ाइलों को हटाएं क्या फ़ाइल नामों की एक सरणी (विभिन्न फ़ोल्डरों में सभी फाइलें) को परिभाषित करना संभव है और फिर लूप में उन्हें हटा दें, या कुछ और करें?पावरहेल

असल में मुझे एक फ़ाइल में एमकेलिंक का उपयोग करके कुछ प्रतीकात्मक लिंक बनाने की ज़रूरत है, जो कि लिंक को एक अलग फ़ोल्डर्स में डाल दें, पुराने लिंक को बदलकर यदि कोई था।

उत्तर

6

फ़ाइल नाम की एक सरणी हटाया जा रहा है सरल है:

Remove-Item foo.txt,c:\temp\bar.txt,baz\baz.txt 

या एक चर के माध्यम से:

$files = 'foo.txt','c:\temp\bar.txt','baz\baz.txt' 
Remove-Item $files 

और फिर भिन्न फ़ोल्डर में सभी फ़ाइलों के आधार पर:

$folders = 'C:\temp','C:\users\joe\foo' 
Get-ChildItem $folders -r | Where {!$_.PSIsContainer} | Remove-Item -WhatIf 

निकालें वास्तविक हटाने के लिए -WhatIf

यदि आप किसी विशिष्ट नाम के साथ फ़ाइल को हटाना चाहते हैं तो आप पैरामीटर Get-ChildItem पर उपयोग कर सकते हैं। यह सबसे अच्छा प्रदर्शन करने दृष्टिकोण होगा:

$folders = 'C:\temp','C:\users\joe\foo' 
Get-ChildItem $folders -r | Where {$_.Name -match 'f\d+.bak$'} | 
          Remove-Item -WhatIf 
+0

PSIsContainer क्या है? – Agzam

+0

क्या आप मुझे बता सकते हैं कि किसी चर में परिभाषित सभी फ़ोल्डरों में दिए गए फ़ाइल नाम के साथ फ़ाइलों को कैसे निकालें? – Agzam

+1

$ PSIsContainer PowerShell द्वारा जोड़ा गया एक प्रॉपर्टी है जो इंगित करती है कि "ChildItem" एक कंटेनर (निर्देशिका) है या नहीं (फ़ाइल) है। ध्यान दें कि यह अवधारणा वास्तविक प्रदाता (फाइल सिस्टम, प्रमाणपत्र, wsman, आदि) से स्वतंत्र है। –

1

कुछ इस तरह काम करना चाहिए:

$folders = 'C:\temp','C:\users\joe\foo' 
Get-ChildItem $folders -r -filter foo.bak | Remove-Item -WhatIf 

नाम तो आप एक कहाँ scriptblock जैसे में एक regex उपयोग कर सकते हैं और अधिक परिष्कृत मिलान की आवश्यकता है कर सकते हैं 'टी परीक्षण अभी, खेद

$filenames = @('filename1.txt', 'filename2.txt', 'filename3.txt') 

foreach($file in $filenames) 
{ 
    #GCI recursive to find all instances of this filename 
    $filesToDelete = Get-ChildItem -R | where {$_.Name -eq $file} 

    foreach($f in $filesToDelete) 
    { 
     #delete the file that matches, etc. here 
     # just using Write-Host to echo out the name for now 
     Write-Host $f.Name 
    } 

} 

सबसे powershell के साथ के रूप में, आप वास्तव में इस सेक सकते हैं, लेकिन चाहते हैं स्पष्टीकरण के लिए विस्तार करने के लिए एड।

आप अपनी आवश्यकताओं के अनुरूप इसे बढ़ा सकते हैं। उदाहरण के लिए यदि आपको "हटाएं" शब्द वाली सभी फाइलों की आवश्यकता है, तो आप gci कर सकते हैं जहां {$ _। नाम-जैसा "$ फ़ाइल"}

+0

आपका .net हिस्सा अवांछित आउटपुट ('जोड़ें') विधि उत्पन्न करता है जिसे त्याग दिया जाना चाहिए। बस '$ filelist = नई ऑब्जेक्ट सिस्टम चलाने के लिए प्रयास करें। चयन .अरेलेलिस्ट; $ Filelist.add ("filename1.txt") '। – stej

+0

में कल इसका परीक्षण करने का समय नहीं था। अभी के लिए हटाया गया। –