フォルダに入っているファイル一覧の情報(名前、ファイルサイズ、ファイル形式など)をリストとして書き出したいときってないでしょうか?
例えば、フォルダの容量がいっぱいになってきて、不要なファイルを削除・移動したいような場面です。
そんなときにWindows標準機能のPowerShellを使って、簡単にファイル情報一覧を書き出す方法があります。フリーソフトなどのツールは使用しませんし、難しい手順もなく、1分も掛からない作業で、とても便利なのでおすすめですよ。
今回はPowerShellを使ってファイル一覧リストを作成する方法について紹介します。
ファイル一覧リストのイメージ
まず最初に、「こんな感じのリストになりますよ」っていう完成形のイメージを載せておきます。
確認したいフォルダに入っているファイル名、フォルダのパス、拡張子、ファイルサイズ、最終アクセス日、最終更新日をCSVファイルに一覧で書き出せます。
Excel形式に保存し直せばフィルターや関数が使えるので、ファイルを探したり、フォルダ整理をするときにとても便利です。
PowerShellを使ってファイル一覧リストを作成する
Powershellとは?
PowerShellとはWindows7以降に標準搭載されているCUIです。
分かりやすく説明すると、文字を入力することでPCに指示を出し、PCが仕事をしてくれるものです。私たちが画面を見ながらマウスを使ってポチポチと作業するのを代わりにやってくれて、かなり効率も良いです。
例えば今回のファイル一覧の書き出しだと、人が手作業でしようとするとマウスを一体何万回クリックするんだというくらいにポチポチとしながら膨大な時間を掛ける必要があります。ですが、PowerShellを使えば、ちょっとした文字を入力(指示)することで面倒な作業をPC側で全て行ってくれます。作業時間も非常に速いです。
PowerShellを使ってとなると難しそうに感じるかもしれませんが、今回の手順はほぼコピペ作業でできるのでとても簡単です。
作業自体は時間にして1分も掛かりません。(ファイル数が膨大なフォルダの場合は、ファイルを書き出すPC側の処理にある程度の時間は掛かります)
ファイル一覧書き出し作業の手順
まずは、ファイル一覧を書き出したいフォルダを開きます。今回はsampleフォルダ配下にあるファイル一覧のリストを作成したいので、sampleフォルダを開いた状態にしておきます。
アドレスバーをクリックします。(もしくはショートカットキーCtrl + Lで移動する)
"powershell"と入力して、エンターキーを打ちます。
するとPowerShellが立ち上がり、このような青い画面が出てきます。「うわ、難しそう」と感じる人もいるかもしれませんが、ここまで来たら後はコピペとエンターキーを押すだけで、ほぼ終わったようなものなので安心してください。
※あまりないとは思いますが、上記のエクスプローラーのアドレスバーにpowershellと入力して開くやり方では、仮に"powershell"という名前のフォルダがどこかにある場合はそこのフォルダが開いてしまいます。その場合は可能であればフォルダの名前を変えてしまうと良いです。
"C:\Users\ユーザー名\Documents\sample>"というような文字が最初から記入されているますが、その文字に続いてスクリプトを入力していきます。今回は以下のスクリプトを入力して、エンターキーを押します。
Get-ChildItem -Recurse -File | Select-Object FullName, DirectoryName, Name, Extension, Length, LastAccessTime, LastWriteTime | Export-Csv -Encoding Default result.csv
長いので、コピー&ペーストするのがおすすめです。メモ帳などに上記スクリプトを保存しておくと必要なときに簡単にコピペできるので便利です。
スクリプトの入力ができたらエンターキーを押すと、処理が始まります。
処理が終わると、"C:\Users\ユーザー名\Documents\sample>"(ここのパスは人によって異なる)のように最初と同じ文字列が再度表示されます。上図の矢印で指した部分です。
逆に"C:\Users\ユーザー名\Documents\sample>"が表示されるまでは処理中となります。
フォルダのファイル数が多いと処理には時間が掛かります。
参考までに、約6万ファイルあるフォルダの書き出しには1時間20分程掛かりました。
処理が完了すると、アドレスバーにpowershellと入力したフォルダ内にcsvファイルが生成されます。このなかにファイル情報の一覧リストが記載されています。
csvファイルを開くとこのようなリストが出力されています。項目が英語になので分かりにくいかもしれませんが、それぞれ以下の意味になります。
- FullName = ファイルのフルパス
- DirectoryName = フォルダのパス
- Name = ファイル名
- Extension = 拡張子
- Length = ファイルサイズ(B)
- LastAccessTime = 最終アクセス日
- LastWriteTime = 最終更新日
Excel形式に保存しなおせば、フィルターや関数が使えるので、ファイルサイズや拡張子でソートしたり、ファイルサイズの合計値を求めることもできます。
スクリプトの簡単な意味の説明
PowerShellを体系的に勉強したわけではないので、細かいところは分かりませんが、スクリプトの内容を①、②、③に分けてざっくり説明します。
①Get-ChildItem -Recurse -File
コマンドレットGet-ChildItemでフォルダ内のサブフォルダやファイル情報一覧を取得(取得という表現で合っているか分かりませんが)します。
また、-Recurseと付け加えることでサブフォルダにあるファイルとフォルダの情報も取得でき、 -Fileと付け加えることで取得する情報をファイルのみに絞ります(フォルダを除外する)。
②Select-Object FullName, DirectoryName, Name, Extension, Length, LastAccessTime, LastWriteTime
①で取得したデータにはたくさんの情報が詰まっていますが、コマンドレットSelect-Objectで指定した項目のみを選択します。
Select-Objectの後ろに選択したい項目をカンマで区切って記入します。上述していますが、Nameと記入すればファイル名が選択されますし、Lengthと記入すればファイルサイズが選択されます。
今回はファイルのフルパス、フォルダ名、ファイル名、拡張子、ファイルサイズ、最終アクセス日、最終更新日の項目を抽出しています。
また、今回は使っていませんが、下記のようにCreationTimeと記入すれば、ファイルの作成日時も取得できます。
Select-Object FullName, DirectoryName, Name, Extension, Length, CreationTime, LastAccessTime, LastWriteTime
(それぞれの項目は書いた順番通りにcsvファイルに出力されます)
他にもIsReadOnlyと記入すれば、そのファイルが読み取り専用かどうかの判別もできます。
③Export-Csv -Encoding Default result.csv
Export-Csvで①、②で取得した結果をcsvファイルに出力します。result.csvの"result"の部分は出力されるcsvのファイル名になるので、何でも大丈夫です。例えば、リスト.csvとすれば、「リスト.csv」という名前のファイルが出力されます。
-Encoding Defaultは文字化けしないように付け加えています。
まとめ
PowerShellを使ってフォルダ内のファイル情報一覧を出力させる方法を紹介しました。
メモ帳などにスクリプトを保存しておいて、必要なときにコピー&ペーストでできるので、簡単且つ便利な方法です。
フォルダ整理時などはとても重宝します。