指定フォルダ以下の全ファイルのフルパスを取得する、PowerShellコマンド備忘録です。
こちらの記事は以前コマンドプロンプト版で示したサンプルのPowerShell版です。
コマンド
ターミナル上に表示する場合
Get-ChildItem -Path C:\temp -Recurse * | Where-Object { ! $_.PSIsContainer } | ForEach-Object { $_.FullName }
ファイルへ結果を出力する場合
Get-ChildItem -Path C:\temp -Recurse * | Where-Object { ! $_.PSIsContainer } | ForEach-Object { $_.FullName } | Out-File -FilePath C:\temp\fileList.txt
※1 c:\temp\test4はファイル一覧の対象のフォルダ
解説
下記のコマンドレットをパイプライン|で繋げて処理を実現しています
コマンドレット | パラメータ | 説明 |
---|---|---|
Get-ChildItem | – | 指定したフォルダ内の項目を一覧表示します。 |
-Path | ディレクトリパスを指定します。 | |
-Recurse | サブディレクトリ以下も対象とします。 | |
Where-Object | – | パイプラインからオブジェクトを削除します。 $_がパイプラインで取得したオブジェクト変数。 $_.PSIsContainerでフォルダを指定となり、 ! $_.PSIsContainerでフォルダ以外となり、ファイルの指定となります。 |
ForEach-Object | – | 反復処理します。 $_がパイプラインで取得したオブジェクト変数。 $_.FullNameとすることでフルパスを取得します。 |
Out-File | – | 出力をファイルに送ります。 |
-FilePath | 出力先をしています。 |
テスト実行
実行準備:テスト対象フォルダの状態
下記のようなフォルダをc:\tempに用意して実行してみます。
また、c:\temp\testのような各サブディレクトリ(test,test2,test3)にも適当なファイルを格納しています。
実行
初心者でも大丈夫なようにPowerShellの起動から丁寧に説明します。
スタートメニュー> WIndows Windows PowerShell >Windows PowerShells を開きます。
先ほど提示した、下記のコマンドを実行します。
Get-ChildItem -Path C:\temp -Recurse * | Where-Object { ! $_.PSIsContainer } | ForEach-Object { $_.FullName } | Out-File -FilePath C:\temp\fileList.txt
実行してもシェル画面は何も出てきませんが、問題ありません。
files.txtというファイル名で、一覧ファイルができているのでこちらを開きます。
ファイルの一覧がフルパスで出力されていることが確認できました。
もちろんtest,test2,test3などのサブディレクトリ配下のファイルも一覧化されており、ファイルのみが取得されております。
その他の方法
なお冒頭で説明したとおり、こちらの記事は以前コマンドプロンプト版で示したサンプルのPowerShell版です。
ただし、コマンドプロンプトは今後の動向が不明瞭な点があり、PowerShellで理解しておくことが安全な気がします(できればCoreで)
また、PowerShellのほうができることが多く、後々スクリプトを拡張する際も楽かと思われます。
参考情報
環境
下記の環境で実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows10 |
2 | PowerShell | 5.1 |
以上です。
コメント