[powershell] Get-ChildItem का उपयोग करके मैं केवल निर्देशिका कैसे प्राप्त करूं?


Answers

PowerShell 3.0 में, यह आसान है:

Get-ChildItem -Directory #List only directories
Get-ChildItem -File #List only files
Question

मैं PowerShell 2.0 का उपयोग कर रहा हूं और मैं एक निश्चित पथ की सभी उप-निर्देशिकाओं को पाइप करना चाहता हूं। निम्न आदेश सभी फ़ाइलों और निर्देशिकाओं को आउटपुट करता है, लेकिन मैं फ़ाइलों को फ़िल्टर करने का तरीका नहीं समझ सकता।

Get-ChildItem c:\mypath -Recurse

मैंने $_.Attributes का उपयोग करने का प्रयास किया है $_.Attributes प्राप्त करने के लिए गुण, लेकिन तब मुझे नहीं पता कि System.IO.FileAttributes का एक शाब्दिक उदाहरण कैसे System.IO.FileAttributes , इसकी तुलना करने के लिए। cmd.exe यह होगा

dir /b /ad /s



उपयोग:

dir -Directory -Recurse | Select FullName

यह आपको रूट संरचना का आउटपुट केवल निर्देशिका के लिए फ़ोल्डर नाम के साथ देगा।




उपयोग:

Get-ChildItem \\myserver\myshare\myshare\ -Directory | Select-Object -Property name |  convertto-csv -NoTypeInformation  | Out-File c:\temp\mydirectorylist.csv

निम्नलिखित कौन सा करता है

  • लक्ष्य स्थान में निर्देशिकाओं की एक सूची Get-ChildItem \\myserver\myshare\myshare\ -Directory : Get-ChildItem \\myserver\myshare\myshare\ -Directory
  • केवल निर्देशिकाओं का नाम निकालें: Select-Object -Property name
  • आउटपुट को सीएसवी प्रारूप में कनवर्ट करें: convertto-csv -NoTypeInformation
  • परिणाम को फ़ाइल में सहेजें: Out-File c:\temp\mydirectorylist.csv



PowerShell v2 और नए से (k उस फ़ोल्डर का प्रतिनिधित्व करता है जिस पर आप अपनी खोज शुरू कर रहे हैं):

Get-ChildItem $Path -attributes D -Recurse

यदि आप केवल फ़ोल्डर नाम चाहते हैं, और कुछ भी नहीं, तो इसका उपयोग करें:

Get-ChildItem $Path -Name -attributes D -Recurse

यदि आप एक विशिष्ट फ़ोल्डर की तलाश में हैं, तो आप निम्न का उपयोग कर सकते हैं। इस मामले में, मैं myFolder नामक फ़ोल्डर की तलाश में myFolder :

Get-ChildItem $Path -attributes D -Recurse -include "myFolder"



एक क्लीनर दृष्टिकोण:

Get-ChildItem "<name_of_directory>" | where {$_.Attributes -match'Directory'}

मुझे आश्चर्य है कि क्या PowerShell 3.0 में एक स्विच है जो केवल निर्देशिका देता है; यह जोड़ने के लिए एक तार्किक बात की तरह लगता है।




आप सभी फ़ोल्डरों और फ़ाइलों को पहले से प्राप्त करने के लिए Get-ChildItem का उपयोग करना चाहेंगे। और उसके बाद आउटपुट ऑब्जेक्ट क्लॉज में आउटपुट पाइप जो केवल फाइलें लेता है।

# one of several ways to identify a file is using GetType() which
# will return "FileInfo" or "DirectoryInfo"
$files = Get-ChildItem E:\ -Recurse | Where-Object {$_.GetType().Name -eq "FileInfo"} ;

foreach ($file in $files) {
  echo $file.FullName ;
}






Related