【ソース公開】指定したフォルダ配下のファイル名や日付を取得するコマンド

プログラミングTips
この記事は約5分で読めます。

訳あって、とあるサーバにおけるファイル使用量の増加傾向を見るため、指定ドライブの階層化にある全ファイルのファイルサイズとタイムスタンプを収集するツールを探したのですが、結局見つかりませんでした。

そこで、仕方なく作成したのですが、似たような事でお困りの方のために、今回公開することにしました。

実行ファイルだけほしい人、ソースコード丸ごとほしい人は、どうぞご活用下さい。

バグについては気づいた時点で修正していこうと思います。

コマンドの概要

指定したドライブ又はフォルダ配下にあるファイルのファイル情報を一覧表示するコンソールアプリケーションです。

各項目の区切りの初期値は空白ですが、オプションでカンマやタブを指定することが可能です。

引数を指定しない場合は簡単な説明が表示されます。

コマンドの使い方

使い方はコマンドの直後に検索したいドライブ又はフォルダを指定し、後は必要に応じてオプションを指定します。

  FileScanner Path [/S] [/TA /CO] [/FY /FD /FM] [/KB /MB /GB] [/NU] [/NQ]

パラメータ内容
Path検索したいドライブ又はフォルダを指定します。
ワイルドカード(*.txt 、data12?.csv など)が使用可能です。
/Sフォルダ階層全てを検索対象とします。
指定しない場合はトップのフォルダのみとなります。
/TA /CO各項目の区切り文字を指定します。
指定しなければ半角スペース、/TAの場合はタブ、/COの場合はカンマ区切りになります。
/FY /FD /FM作成日時、更新日時、アクセス日時の表示を年や日付け単位に省略します。
/FY は年のみ、/FD は年月のみ、 /FM は年月日のみを表示します。
指定が無い場合、年月日時分秒 が表示されます。
/KB /MB /GBファイルサイズの表示単位を指定します。
/KB はキロバイト、/MB はメガバイト、/GB はギガバイト単位となります。
メガバイト、ギガバイトの場合は小数点3桁までを表示します。
指定がない場合はバイト単位となります。
/NUファイルサイズの直後にはByte、KByte、MByte、GByteの単位が表示されますが、/NUを指定すると単位を表示しません。
/NQファイル名には半角スペースが含まれる可能性があるため、ダブルクォーテーショで両端を囲んでいますが、 /NQ を指定すると囲まなくなります。

このコマンドを実行して得られるファイル情報は次の通りです。

列名内容
Pathファイルのフルパス
Lenサイズ
Create作成日時
LastWrite更新日時
LastAccessアクセス日時

出力結果をリダイレクトでファイルにしたものをEXCELで表示すると、以下の様になります。

コマンドのダウンロード方法

プログラムのみ必要は方は、下記からダウンロードできます。

Visual Studio2019のプロジェクト一式

ソースコードに興味がある方、必要な機能が無いので追加したい方、バグが見つかったので修正して使いたい方は、下記からプロジェクト一式をダウンロードしてください。

コマンドのソースコード

以下がソースコードになります。

プロジェクトをダウンロードする代わりに、Visual Studioでコンソールアプリケーションのプロジェクトを作成し、下記ソースをコピペして頂く方法もあります。

ファイル情報の取得方法について

ファイル情報を取得するFiles メソッドですが、引数の異なる2種類を用意しています。

  • Files(string path, SearchOption searchOption) 
  • Files(string directory, string filter, SearchOption searchOption)

実際にファイル情報を取得するのは2つ目の Files メソッドで、内部でEnumerateFiles メソッドを読んでファイル情報を取得しています。

こちらは EnumerateFiles の仕様が、対象フォルダの指定とフィルタの指定を別々で指定する形になっているため、これに合わせています。

一方1つ目の Files は、”d:\Document\*.txt” という風に、フォルダ名とファイル名のワイルドカードを合わせて指定できるようにしたかったので、path の中身を解析して、directory と filter に分割する処理を行わせています。

EnumerateFilesに関する詳細は こちら の記事に記載していますが、ここではアクセス権限の無いフォルダを参照した場合の例外エラーが発生しないよう、try~catch を使って例外を握りつぶしています。

このFilesメソッドを丸ごとコピー&ペーストして、必要なプログラムに張り付けていただければ、そのまま使えます。

コマンドパラメータの判定について

コマンド起動時において、 /S や /TA、/CO など、スラッシュから始まるパラメータが指定できるようになっていますが、Main(string[] args)で渡ってきた引数からパラメータを判定する手段としてFindOption というメソッドを作っています。

これは、option で指定されたパラメータ文字列が、args配列に含まれているかをチェックするという簡単なものです。

/D:1000 とか /T:20 の様に、パラメータの後に可変の値が続く場合は、Splitメソッドで分解して値を取り出すなどの処理が必要になりますが、単純なパラメータ指定だけであれば、この方法でも十分使えるかと思います。

まとめ

今回は、指定したドライブ又はフォルダに対して、階層を下って全てのファイル情報を取得する FileScanner コマンドについて、実行プログラム、プロジェクト一式の公開と、ソースコードの簡単な解説を行いました。

コマンドの出力結果はリダイレクトを使ってCSVファイルとして保存できますので、EXCELなどに読み込んで使用容量の増加推移などをグラフ化するなどの用途に使えます。

ディスク容量が気になる方は、是非ご活用下さい。

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