পুনরাবৃত্তভাবে একটি ডিরেক্টরি প্যাটার্ন বাদ দিতে পারে না


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
যাইহোক, আপনি যদি পারফরম্যান্সের কারণে বৃহত ডিরেক্টরিগুলি বাদ দিতে চান (নোড_মডিউলগুলির মতো) তবে এটি কার্যকর হবে না কারণ এটি এখনও পুনরাবৃত্তভাবে সমস্ত কিছু পরীক্ষা করে এবং তারপরে ফিল্টার করবে।
প্লাক

এই সম্পর্কে কি ? গেট-চাইল্ড আইটেম -কে বাদ দিন_ডির | foreach {গিটার-চাইল্ড আইটেম -পথ $ _ -সৃজন করুন * inc অন্তর্ভুক্ত করুন -অনুসরণ -পরিচালনা * .পরিবর্তন | foreach {প্রতিধ্বনি $ _}}
NN_
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.