回答:
PowerShellバージョンが3.0未満の場合:
FileInfo
返されたオブジェクトは、Get-ChildItem
「ベース」性質を持っていますPSIsContainer
。それらの項目のみを選択したいとします。
Get-ChildItem -Recurse | ?{ $_.PSIsContainer }
ディレクトリの生の文字列名が必要な場合は、次のようにすることができます
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
PowerShell 3.0以降の場合:
dir -Directory
PowerShell 3.0では、より簡単です。
Get-ChildItem -Directory #List only directories
Get-ChildItem -File #List only files
dir
はにエイリアスされGet-ChildItem
、-Directory
および-File
オプションは説明どおりに機能しました。私は、コマンドを使用しecho $PSVersionTable
、help dir
、dir -Directory
およびdir -File
このコメントを思い付きます。
ls
そして、あなたの毒dir
をGet-ChildItem
選ぶのエイリアスです
使用する
Get-ChildItem -dir #lists only directories
Get-ChildItem -file #lists only files
エイリアスが必要な場合は、
ls -dir #lists only directories
ls -file #lists only files
または
dir -dir #lists only directories
dir -file #lists only files
サブディレクトリも再帰的にするには、-r
オプションを追加します。
ls -dir -r #lists only directories recursively
ls -file -r #lists only files recursively
PowerShell 4.0、PowerShell 5.0(Windows 10)、PowerShell Core 6.0(Windows 10、Mac、およびLinux)、PowerShell 7.0(Windows 10、Mac、およびLinux)でテスト済み。
注:PowerShell Coreでは、-r
スイッチを指定してもシンボリックリンクはたどられません。シンボリックリンクをたどるには、で-FollowSymlink
スイッチを指定します-r
。
注2:バージョン6.0以降、PowerShellはクロスプラットフォームになりました。クロスプラットフォームバージョンはもともとPowerShell Coreと呼ばれていましたが、PowerShell 7.0以降、「コア」という言葉は削除されました。
Get-ChildItemのドキュメント:https ://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
よりクリーンなアプローチ:
Get-ChildItem "<name_of_directory>" | where {$_.Attributes -match'Directory'}
PowerShell 3.0には、ディレクトリのみを返すスイッチがあるのでしょうか。追加するのは論理的なことのようです。
-Directory
および-File
フラグを追加します
使用する:
dir -r | where { $_ -is [System.IO.DirectoryInfo] }
PowerShell v2以降(kは検索を開始するフォルダーを表します):
Get-ChildItem $Path -attributes D -Recurse
フォルダー名のみが必要で、それ以外は必要ない場合は、次のようにします。
Get-ChildItem $Path -Name -attributes D -Recurse
特定のフォルダを探している場合は、以下を使用できます。この場合、次のフォルダを探していますmyFolder
。
Get-ChildItem $Path -attributes D -Recurse -include "myFolder"
このアプローチでは、必要なテキストが少なくなります。
ls -r | ? {$_.mode -match "d"}
使用する:
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
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
あなたは、使用したいと思うには、Get-ChildItemコマンドレットを再帰的に最初にすべてのフォルダとファイルを取得します。次に、その出力をWhere-Object句にパイプして、ファイルのみを取得します。
# 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 ;
}
受け入れられた回答の言及
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | Select-Object FullName
「生の文字列」を取得します。しかし、実際にはタイプのオブジェクトSelected.System.IO.DirectoryInfo
が返されます。生の文字列の場合、以下を使用できます。
Get-ChildItem -Recurse | ?{ $_.PSIsContainer } | % { $_.FullName }
値が文字列に連結されている場合、違いは重要です。
Select-Object
驚きますfoo\@{FullName=bar}
ForEach
演算子は予想:foo\bar
Select-Object -ExpandProperty FullName
私のソリューションは、TechNetの記事「Get-ChildItemコマンドレットでできること」に基づいています。
Get-ChildItem C:\foo | Where-Object {$_.mode -match "d"}
スクリプトで使用しましたが、問題なく動作します。