大抵の職場で利用されているWindows7以上で使える対象ファイル一覧を効率よくまとめるHOWTOです。PowerShellを開いて、コマンド部分だけでも実行してみて損は無いはずです。1分もかかりませんから。
<<本投稿での成果物(不要列を削除して成形済み)>>
『対象ディレクトリ一覧にある書類一覧を出して、その書類を作成日毎に必要性を判断し、不要なら削除して欲しい。もちろん、削除した理由も後で分かるように履歴を残しておいてください。』と言うような指示を受けた際に、抜け漏れを無くし、信頼性の高い報告書を短時間で作る方法です。
この投稿を書く切っ掛けとなったのは、このような指示をすると、必ずと言っていいほど手作業でリストを作成して持ってくる人がいるためです。良くあるのは、『ディレクトリ構成が深くなっていた為、エクスプローラで下のフォルダまで辿っていき、名前の変更で名前をコピーして一覧を作りました。』と言うとんでも無い作り方です。そんな非効率な事をしているため、『丸一日かけて作成しました。』と言う事もざらです。やり直し以外の選択肢が無い事は言うまでも有りません。折角頑張っても、結果が出ないと悲しいですよね。
そんな事にならない為に最低限やって欲しいのは『dir > filelist.txt』です。本投稿でもう一歩進めて、ファイル作成日や、ディレクトリパス、ファイル名も取得する為に、更に効率のいいoneliner(ワンライナー)でのやり方を紹介します。
対象OS
- Windows Vista
- Windows 7
- Windows 8
- Windows 8.1
- Windows 10(たぶん)
- Windors Server 2008(R2)
- Windows Server 2012(R2)
PowerShellの起動方法
スタートメニュー>すべてのプログラム>アクセサリ>Windows PowerShell>Windows PowerShell
特定のフォルダの下にあるファイル一覧をCSV出力する
特定のフォルダの下にあるファイル一覧を作成したいケースは良くあります。ぱっと思いつくだけでも、下記のようなケースがあります。
- SVNで管理している対象ファイル一覧をリストアップしたい。
- 編集対象のExcellファイル、Wordファイル一覧を作成したい。
- 画像ファイル一覧を作成したい。
- ある時点でのファイル一覧を作成日、更新日を明確にして取得しておきたい
コマンド実行例
下記コマンドでは、Get-ChildItemコマンドに、ディレクトリを再帰的に見るRecurseオプションと、除外ファイルを指定するExcludeオプションにドットから始まるようなファイルを除外すると指定しています。その結果をパイプでExport-Csvに繋げて、コマンドを実行したディレクトリにfilelist.csvとして出力しています。
Get-ChildItem -Recurse -Exclude .* | Export-Csv ./filelist.csv
ちなみに、処理対象ディレクトリを変更するには、PowerShellでは下記のようにcdコマンドを使います。cdはChange Directoryの略です。
cd d:\download
出力ファイル例
下記のようなファイルが出来ます。
出力ファイルのヘッダ一覧
このワンライナーのコードで出力されるcsvファイルに含まれる情報は下記のとおりです。ファイル名、ファイルパスはもちろんの事、作成日や更新日も入っています。CSVファイルはExcelで開けるので、不要な列を削除したり並び替えたりして必要なリストを作成してください。編集後は、拡張子をxls、もしくはxlsxで保存してください。
- PSPath
- PSParentPath
- PSChildName
- PSDrive
- PSProvider
- PSIsContainer
- BaseName
- Mode
- Name
- Parent
- Exists
- Root
- FullName
- Extension
- CreationTime
- CreationTimeUtc
- LastAccessTime
- LastAccessTimeUtc
- LastWriteTime
- LastWriteTimeUtc
- Attributes
最後に
本投稿の一番最初で、手作業で頑張る方法と機械的にファイルリストを作成する方法の例が出ましたが、ワンライナーでリストを作れば一瞬で間違いのない物が出来ます。対して、手作業だと悪いと1日かけて低品質な物が出来るだけと言う事もあります。
PowerShellをプログラミング言語か何かだと思いこまずに、使い込んでいくと出来る人になれるかもしれません。