【PowerShell】サブフォルダ配下も含めてファイルの一覧を取得する


この記事はプロモーションを含みます。

PowerShell

ホーム > PowerShell 逆引きリファレンス

PowerShellを使用して、再帰的にファイルの一覧を取得する方法について解説します。
また、テキストへの出力方法も併せて記載しています。

ファイル一覧をCSV形式で出力したい場合は以下の記事をご覧ください。

シンプルな取得例

以下のコマンドを実行することで、サブフォルダ配下のファイルも含めて再帰的にファイルの一覧を取得することが可能です。
ポイントはオプションに「-Recurse」を付けることです。

Get-ChildItem -Recurse

実際に実行した結果になります。

PS C:\Users\USER> cd C:\work

PS C:\work> Get-ChildItem -Recurse


    ディレクトリ: C:\work


Mode                 LastWriteTime         Length Name                                                                                        
----                 -------------         ------ ----                                                                                        
d-----        2022/01/21     13:31                module                                                                                      
d-----        2022/01/14     14:21                フォルダ1                                                                                       
d-----        2022/01/14     14:17                フォルダ2                                                                                       
-a----        2022/01/21     15:30             82 blog.ps1                                                                                    
-a----        2022/01/21     14:29            299 blog.ttl                                                                                    
-a----        2022/01/20     15:39           1081 blog.vbs                                                                                    
-a----        2022/01/20     17:23            615 function.vbs                                                                                
-a----        2022/01/21     11:57            891 main.vbs                                                                                    
-a----        2022/01/21     15:23            844 ps1.txt                                                                                     
-a----        2022/01/19     13:12            180 zipFolder.zip                                                                               
-a----        2022/01/11     12:44              0 新しいテキスト ドキュメント_1.txt                                                                        
-a----        2022/01/11     12:44              0 新しいテキスト ドキュメント_2.txt                                                                        
-a----        2022/01/11     12:44              0 新しいテキスト ドキュメント_3.txt                                                                        


    ディレクトリ: C:\work\module


Mode                 LastWriteTime         Length Name                                                                                        
----                 -------------         ------ ----                                                                                        
-a----        2022/01/21     13:37            230 login.ttl                                                                                   


    ディレクトリ: C:\work\フォルダ1


Mode                 LastWriteTime         Length Name                                                                                        
----                 -------------         ------ ----                                                                                        
-a----        2022/01/12     18:35              3 テキスト1.txt                                                                                   
-a----        2022/01/12     18:35              3 テキスト2.txt                                                                                   
-a----        2022/01/12     18:35              3 テキスト4.txt                                                                                   


    ディレクトリ: C:\work\フォルダ2


Mode                 LastWriteTime         Length Name                                                                                        
----                 -------------         ------ ----                                                                                        
-a----        2022/01/12     18:35              3 テキスト1.txt                                                                                   
-a----        2022/01/12     18:35              3 テキスト3.txt

このままでは、他のツールに連携したり、自動化に使用しにくいので、フルパスで表示されるようにしたいと思います。

フルパスで表示されるようにした例

フルパスで表示させるようにした例になります。
コマンドに「| ForEach-Object {$_.FullName}」を追加しました。

Get-ChildItem -Recurse | ForEach-Object {$_.FullName}

実際に実行した結果ですが、並び順も問題なく、これであれば他のツールなどとの連携もしやすそうですね。

PS C:\Users\USER> cd C:\work
PS C:\work> Get-ChildItem -Recurse | ForEach-Object {$_.FullName}
C:\work\module
C:\work\フォルダ1
C:\work\フォルダ2
C:\work\blog.ps1
C:\work\blog.ttl
C:\work\blog.vbs
C:\work\function.vbs
C:\work\main.vbs
C:\work\ps1.txt
C:\work\zipFolder.zip
C:\work\新しいテキスト ドキュメント_1.txt
C:\work\新しいテキスト ドキュメント_2.txt
C:\work\新しいテキスト ドキュメント_3.txt
C:\work\module\login.ttl
C:\work\フォルダ1\テキスト1.txt
C:\work\フォルダ1\テキスト2.txt
C:\work\フォルダ1\テキスト4.txt
C:\work\フォルダ2\テキスト1.txt
C:\work\フォルダ2\テキスト3.txt

フルパスで取得した結果をテキストに出力する

コマンドに「| Out-File {出力ファイル名}」を追加することでテキストへの出力が可能です。
以下の例では、「C:\work」配下に「ps1.txt」というファイル名で出力します。

Get-ChildItem -Recurse | ForEach-Object {$_.FullName} | Out-File C:\work\ps1.txt

実際に実行した結果になります。
実行結果はテキストに出力するため、画面には表示されません。

PS C:\Users\USER> cd C:\work
PS C:\work> Get-ChildItem -Recurse | ForEach-Object {$_.FullName} | Out-File C:\work\ps1.txt

記事は以上です。簡単にファイルリストの表示、テキストへの出力が出来ました。
ps1ファイルにしておけば、他のツールとの連携も容易なので自動化が捗りそうですね。

コメント

タイトルとURLをコピーしました