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ファイルにしておけば、他のツールとの連携も容易なので自動化が捗りそうですね。
リンク
コメント