दिलचस्प पोस्ट
एंड्रॉइड ऑडियोरेकॉर्ड उदाहरण एकाधिक शब्द दस्तावेजों को एक ओपन एक्सएमएल में मिलाएं विभिन्न नियंत्रक क्रिया विधियों के बीच डेटा पास करना मैं आर डेटाफ्रेम में चर का चयन कैसे करूं, जिनके नामों में कोई विशिष्ट स्ट्रिंग होती है? आईओएस पर बातचीत / फोन कॉल कैसे रिकॉर्ड कर सकता हूं? आर्किटेक्चर i386 के लिए अनिर्धारित प्रतीकों: "_OBJC_CLASS _ $ _ZipException", से संदर्भित: त्रुटि बहुस्तर पाठ के लिए एक एलीपिसिस लागू करना Xticks निकालें, लेकिन MATLAB में xticklabels रखें ट्रिगर करने / पकड़ने का उपयोग कब किया जाए? आप जावा में एक एलआरयू कैश कैसे लागू करेंगे? मैं .NET में एक यूएसबी वेबकैम से कैसे जुड़ूं? X86-64 विधानसभा के प्रदर्शन के अनुकूलन – संरेखण और शाखा पूर्वानुमान बाएं जुड़ने और सही SQL सर्वर में शामिल होने के बीच का अंतर पायथन डिक्शनरी से कोई आइटम निकालने का सबसे अच्छा तरीका है? Larache के लिए अपाचे मॉड पुनर्लेखन

Get-ChildItem -exclude का उपयोग कर मैं एकाधिक फ़ोल्डर्स कैसे निकाल सकता हूं?

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

मैंने निम्नलिखित को लिखा है जो कि काम करता है, इसके अलावा इसमें फ़ोल्डरों को शामिल नहीं किया जाता !!

$folder = "T:\Drawings\Design\*" $raw_txt = "T:\Design Projects\Design_Admin\PowerShell\raw.txt" $search_pro = "T:\Design Projects\Design_Admin\PowerShell\search.pro" $archive = *archive*,*Archive*,*ARCHIVE* Get-ChildItem -Path $folder -Exclude $archive -Recurse | where {$_.Attributes -match 'Directory'} | ForEach-Object {$_.FullName} > $search_pro 

Solutions Collecting From Web of "Get-ChildItem -exclude का उपयोग कर मैं एकाधिक फ़ोल्डर्स कैसे निकाल सकता हूं?"

मैं इसे इस तरह करूँगा:

 Get-ChildItem -Path $folder -r | ? { $_.PsIsContainer -and $_.FullName -notmatch 'archive' } 

बहिष्कार पैटर्न केस-असंवेदनशील होना चाहिए, इसलिए आपको बहिष्करण के लिए प्रत्येक मामले को निर्दिष्ट नहीं करना चाहिए।

उस ने कहा, -Exclude पैरामीटर तारों की एक सरणी को स्वीकार करता है, इसलिए जब तक आप $archive को परिभाषित करते हैं, तब तक आपको सेट होना चाहिए।

$archive = ("*archive*","*Archive*","*ARCHIVE*");

आपको $folder से अनुगामी तारांकन ड्रॉप भी करना चाहिए – जब आप निर्दिष्ट कर रहे हैं -recurse , आपको केवल शीर्ष-स्तरीय फ़ोल्डर देना चाहिए।

$folder = "T:\Drawings\Design\"

पूरी तरह से संशोधित स्क्रिप्ट यह यह भी बदलता है कि आप कैसे पता लगा सकते हैं कि आपको एक निर्देशिका मिली है, और Foreach-Object छोड़ दिया गया है क्योंकि आप सीधे संपत्ति को सीधे खींच सकते हैं और फ़ाइल में उसे सब कुछ डंप कर सकते हैं।

 $folder = "T:\Drawings\Design\"; $raw_txt = "T:\Design Projects\Design_Admin\PowerShell\raw.txt"; $search_pro = "T:\Design Projects\Design_Admin\PowerShell\search.pro"; $archive = ("*archive*","*Archive*","*ARCHIVE*"); Get-ChildItem -Path $folder -Exclude $archive -Recurse | where {$_.PSIsContainer} | select-Object -expandproperty FullName |out-file $search_pro 

अगर यह जवाब पिछले उत्तरों के दोहराव जैसा लगता है तो मैं माफी चाहता हूं मैं सिर्फ एक अपडेट (पॉओश 5.0 के माध्यम से परीक्षण किया गया था) इसे सुलझाने का तरीका देखना चाहता हूं पिछले उत्तर पूर्व-3.0 थे और आधुनिक समाधान के रूप में कुशल नहीं थे।

प्रलेखन इस पर स्पष्ट नहीं है, लेकिन Get-ChildItem -Recurse -Exclude केवल बहिष्कार के पत्तों ( Split-Path $_.FullName -Leaf ) से मेल करें, पैरेंट पथ ( Split-Path $_.FullName -Parent ) । अपवर्जन को मिलान करने से आइटम को मिलान वाले पत्ते से हटा दिया जाएगा; Get-ChildItem अभी भी उस पत्ती में recurse जाएगा

पॉश 1.0 या 2.0 में

 Get-ChildItem -Path $folder -Recurse | ? { $_.PsIsContainer -and $_.FullName -inotmatch 'archive' } 

नोट: @ सीबी के समान उत्तर

पॉश 3.0+ में

 Get-ChildItem -Path $folder -Directory -Recurse | ? { $_.FullName -inotmatch 'archive' } 

नोट: @ सीबी से अपडेट किया गया उत्तर

एकाधिक निकाले

यह विशेष रूप से निर्देशिकाओं को लक्षित करता है, जबकि Exclude पैरामीटर के साथ पत्ते को छोड़कर, और माता-पिता ilike (मामले-असंवेदनशील जैसे) तुलना के साथ:

 #Requires -Version 3.0 [string[]]$Paths = @('C:\Temp', 'D:\Temp') [string[]]$Excludes = @('*archive*', '*Archive*', '*ARCHIVE*', '*archival*') $files = Get-ChildItem $Paths -Directory -Recurse -Exclude $Excludes | %{ $allowed = $true foreach ($exclude in $Excludes) { if ((Split-Path $_.FullName -Parent) -ilike $exclude) { $allowed = $false break } } if ($allowed) { $_ } } 

नोट: यदि आप चाहते हैं कि आपका $Excludes केस-संवेदी हो, तो दो चरण हैं:

  1. Get-ChildItem से Exclude पैरामीटर Exclude
  2. if स्थिति को पहले बदलें if :
    • if ($_.FullName -clike $exclude) {

नोट: इस कोड में अतिरेक है कि मैं उत्पादन में कभी भी लागू नहीं होगा आपको अपनी सटीक आवश्यकताओं के अनुरूप यह काफी आसान करना चाहिए। यह एक महत्वपूर्ण उदाहरण के रूप में अच्छी तरह से कार्य करता है

कुछ फ़ोल्डर्स को छोड़ने के लिए मेरा दृष्टिकोण मिल रहा है- Get-ChildItem कॉल यह मूल स्तर के फ़ोल्डर्स को शामिल नहीं करता है और गहरा स्तर के फ़ोल्डर्स नहीं है, अगर आप चाहते हैं

 Get-ChildItem -Exclude folder1,folder2 | Get-ChildItem -Recurse | ... 
  • सबसे पहले आप उन फ़ोल्डरों को बाहर नहीं करते जिन्हें आप नहीं चाहते हैं
  • फिर आप रिकर्सिव खोज कर सकते हैं क्योंकि वांछित फ़ोल्डरों को पहले से ही बाहर रखा गया है।

मुझे इस दृष्टिकोण से क्या पसंद है, यह याद रखना सरल और आसान है यदि आप पहले खोज में फ़ोल्डरों और फ़ाइलों को मिश्रण नहीं करना चाहते हैं, तो फ़िल्टर की आवश्यकता होगी।

मुझे पता है कि यह बहुत पुराना है – लेकिन एक आसान समाधान की तलाश में, मैंने इस धागे पर ठोकर खाई … अगर मुझे सही सवाल मिला, तो आप गेट-बाल आईटम का उपयोग करके एक से अधिक डायरेक्टरी को सूचीबद्ध करने का तरीका तलाश रहे थे। पॉशेशल 5.0 का प्रयोग करने में आसान तरीका लगता है – उदाहरण

 Get-ChildItem -Path D:\ -Directory -Name -Exclude tmp,music chaos docs downloads games pics videos 

बिना- खंड को छोड़ें, टीएमपी और संगीत अभी भी उस सूची में होगा। यदि आप उपयोग नहीं करते हैं -नाम -अनुच्छेद क्लॉज काम नहीं करेगा, क्योंकि Get-ChildItem के विस्तृत आउटपुट के कारण उम्मीद है कि कुछ लोगों को कुछ विशिष्ट नामों के बिना सभी निर्देशिका नामों की सूची का आसान तरीका तलाशने में मदद मिलती है …

चीयर्स लिल

आप इस तरह से बाहर निकल सकते हैं, regex 'या' प्रतीक, जो फ़ाइल आप चाहें मानते हुए उस फ़ोल्डर को छोड़कर आप समान नाम नहीं रखते हैं

 $exclude = 'dir1|dir2|dir3' ls -r | where { $_.fullname -notmatch $exclude } ls -r -dir | where fullname -notmatch 'dir1|dir2|dir3' 

वर्टिग्रा, उनके जवाब में, समझाया गया कि -अनुवाद केवल पथ के पत्ते स्तर पर काम करता है (एक फ़ाइल के लिए फ़ाइल के नाम से पथ छीन लिया जाता है; उप-निर्देशिका के लिए पथ के साथ निर्देशिका नाम छीन लिया जाता है)। इसलिए ऐसा लगता है -अनुवाद एक निर्देशिका (जैसे "बिन") निर्दिष्ट करने के लिए और उस निर्देशिका में सभी फाइलों और उप-निर्देशिका को बाहर करने के लिए उपयोग नहीं किया जा सकता।

यहां एक या अधिक निर्देशिकाओं की फाइलें और उप-निर्देशिकाओं को बाहर करने के लिए एक फ़ंक्शन है (मुझे पता है कि यह सीधे सवाल का जवाब नहीं दे रहा है, लेकिन मैंने सोचा कि यह -अनुवाद की सीमाओं को प्राप्त करने में उपयोगी हो सकता है):

 $rootFolderPath = 'C:\Temp\Test' $excludeDirectories = ("bin", "obj"); function Exclude-Directories { process { $allowThrough = $true foreach ($directoryToExclude in $excludeDirectories) { $directoryText = "*\" + $directoryToExclude $childText = "*\" + $directoryToExclude + "\*" if (($_.FullName -Like $directoryText -And $_.PsIsContainer) ` -Or $_.FullName -Like $childText) { $allowThrough = $false break } } if ($allowThrough) { return $_ } } } Clear-Host Get-ChildItem $rootFolderPath -Recurse ` | Exclude-Directories 

निर्देशिका पेड़ के लिए:

 C:\Temp\Test\ | |_SomeFolder\ | | | |_bin (file) | |_MyApplication\ | |_BinFile.txt |_FileA.txt |_FileB.txt | |_bin\ | |_Debug\ | |_SomeFile.txt 

परिणाम है:

 C:\Temp\Test\ | |_SomeFolder\ | | | |_bin (file) | |_MyApplication\ | |_BinFile.txt |_FileA.txt |_FileB.txt 

इसमें बिन \ उप-फ़ोल्डर और उसकी सभी सामग्री को शामिल नहीं किया गया है, लेकिन यह फ़ाइलों को Bin.txt या bin (फ़ाइल को "एक्सटेंशन" के बिना "बिन" नाम से बाहर नहीं रखा गया है)।

आपके मामले में हो सकता है कि आप इसे निम्नलिखित से प्राप्त कर सकते हैं:

  mv excluded_dir ..\ ls -R mv ..\excluded_dir .