Saya menggunakan PowerShell 2.0 dan saya ingin menyalurkan semua subdirektori dari jalur tertentu. Perintah berikut menampilkan semua file dan direktori, tetapi saya tidak tahu cara memfilter file.
Get-ChildItem c:\mypath -Recurse
Saya sudah mencoba menggunakan $_.Attributes
untuk mendapatkan atribut tetapi kemudian saya tidak tahu bagaimana membangun contoh literal System.IO.FileAttributes
untuk membandingkannya. Di cmd.exe
dalamnya akan
dir /b /ad /s
powershell
powershell-2.0
Peter Hull
sumber
sumber
Di PowerShell 3.0, lebih sederhana:
sumber
dir
aliasGet-ChildItem
,-Directory
dan-File
opsi dan bekerja seperti yang dijelaskan. Saya menggunakan perintahecho $PSVersionTable
,help dir
,dir -Directory
dandir -File
untuk datang dengan komentar ini.ls
dandir
alias untukGet-ChildItem
mengambil racun AndaMenggunakan
Jika Anda lebih suka alias, gunakan
atau
Untuk mengulangi subdirektori juga, tambahkan
-r
opsi.Diuji pada PowerShell 4.0, PowerShell 5.0 (Windows 10), PowerShell Core 6.0 (Windows 10, Mac, dan Linux), dan PowerShell 7.0 (Windows 10, Mac, dan Linux).
Catatan : Pada PowerShell Core, symlink tidak diikuti ketika Anda menentukan
-r
sakelar. Untuk mengikuti symlink, tentukan-FollowSymlink
sakelar dengan-r
.Catatan 2 : PowerShell sekarang lintas-platform, sejak versi 6.0. Versi cross-platform pada awalnya disebut PowerShell Core, tetapi kata "Core" telah dihapus sejak PowerShell 7.0+.
Dokumentasi Get-ChildItem: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
sumber
Pendekatan yang lebih bersih:
Saya ingin tahu apakah PowerShell 3.0 memiliki saklar yang hanya mengembalikan direktori; sepertinya hal yang logis untuk ditambahkan.
sumber
-Directory
dan-File
benderaMenggunakan:
sumber
Dari PowerShell v2 dan yang lebih baru (k mewakili folder tempat Anda memulai pencarian):
Jika Anda hanya ingin nama folder saja, dan tidak ada yang lain, gunakan ini:
Jika Anda mencari folder tertentu, Anda bisa menggunakan yang berikut ini. Dalam hal ini, saya mencari folder bernama
myFolder
:sumber
Lebih sedikit teks diperlukan dengan pendekatan ini:
sumber
Menggunakan:
Ini akan memberi Anda output dari struktur root dengan nama folder hanya untuk direktori.
sumber
Menggunakan:
Yang melakukan hal berikut
Get-ChildItem \\myserver\myshare\myshare\ -Directory
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
sumber
Pendekatan yang lebih mudah dibaca dan sederhana dapat dicapai dengan skrip di bawah ini:
Semoga ini membantu!
sumber
Anda akan ingin menggunakan Get-ChildItem untuk secara rekursif mendapatkan semua folder dan file terlebih dahulu. Dan kemudian pipa output itu menjadi klausa Where-Object yang hanya mengambil file.
sumber
Jawaban yang diterima menyebutkan
untuk mendapatkan "string mentah". Namun pada kenyataannya objek bertipe
Selected.System.IO.DirectoryInfo
akan dikembalikan. Untuk string mentah berikut ini dapat digunakan:Perbedaannya penting jika nilainya disatukan dengan string:
Select-Object
mengejutkanfoo\@{FullName=bar}
ForEach
-operator yang diharapkan:foo\bar
sumber
Select-Object -ExpandProperty FullName
Solusi saya didasarkan pada artikel TechNet, Hal Menyenangkan yang Dapat Anda Lakukan Dengan Cmdlet Get-ChildItem .
Saya menggunakannya dalam skrip saya, dan itu berfungsi dengan baik.
sumber
Gunakan yang ini:
sumber
Untuk menjawab pertanyaan asli secara khusus (menggunakan IO.FileAttributes):
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}
Saya lebih suka solusi Marek (
Where-Object { $_ -is [System.IO.DirectoryInfo] }
).sumber