एक निर्देशिका पैटर्न को पुनरावर्ती रूप से बाहर नहीं कर सकते


30

मैं एक फ़ोल्डर के बच्चे आइटम पुनरावर्ती प्राप्त करने के लिए कोशिश कर रहा हूँ। हालाँकि फ़ोल्डर में शोर फ़ाइलें और फ़ोल्डर हैं (वास्तव में, यह एक विज़ुअल स्टूडियो प्रोजेक्ट फ़ोल्डर है)।

यहाँ मेरे पास क्या है:

$root = Get-Item C:\Projects\MyProject

$allItems =  Get-ChildItem $root -Recurse -exclude "**\pkgobj\*"

हालाँकि, $allItemsअभी भी पथ से मेल खाती फ़ाइलें और फ़ोल्डर हैं।

मैंने क्या ग़लत किया था?

अधिक सटीक होने के लिए, मैं फ़ोल्डर और फ़ाइलों दोनों को प्राप्त करना चाहता हूं, लेकिन निर्दिष्ट फ़ोल्डर और इसके किसी भी वंशज को नहीं।

मैंने भी कोशिश की:

foreach($item in $allItems){
    if($item.FullName -notmatch "pkgobj") {
        Write-Host -ForegroundColor Green $item.FullName.Replace($root,'')

    }
}

लेकिन कोई और सफलता नहीं

जवाबों:


44

मुझे इस मुद्दे को समझने के लिए एक पल लगा। यह एक मुश्किल एक है।

-excludeकेवल आइटम (यानी myfile.txt) के बेसनेम पर लागू होता है , न कि पूर्ण नाम
(यानी C:\pkgobj\myfile.txt) जो आप चाहते हैं। तो अगर आप उपयोग नहीं कर सकते बाहर निकालने के लिए यहाँ।

लेकिन एक वर्कअराउंड का उपयोग कर रहा है Fullnameऔर-notlike

$root = "C:\Projects\MyProject"
$allitems = Get-ChildItem $root -Recurse | Where {$_.FullName -notlike "*\pkgobj\*"} 

1
हालाँकि, यदि आप प्रदर्शन (जैसे नोड_मॉड्यूल्स) के कारण बड़ी निर्देशिकाओं को बाहर करना चाहते हैं, तो इससे मदद नहीं मिलेगी क्योंकि यह अभी भी सब कुछ फिर से जाँच करेगा और बाद में फ़िल्टर करेगा।
Pluc

इस बारे में क्या ? Get-ChildItem -Exclude बहिष्कृत_दिर | foreach {Get-ChildItem -Path $ _ -Include * .include -Recurse -Exclude * .excludefile | foreach {echo $ _}}
NN_
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.