2012年5月31日木曜日

PowerShellによるファイルの一覧取得

ファイル一覧を取得する方法について覚書き
(細かいところは後日まとめる予定。予定、ということはやらない可能性が高い)

Get-ChildItemコマンドレットでファイル一覧の取得が可能。

色々とオプションがあり、取得するファイルの種類なども指定可能。
-Forceオプションを使用すると隠しファイルなども出力に含めることができる。
言い換えれば付けないと出力されない。
-Recurseオプションを使用するとサブフォルダも再帰的に処理して一覧を出力してくれる。
VBScriptの時は再帰的に処理するように自分で組まないといけなかったのにこれだけでやってくれるなんて...。


これだとコンソール上にだらだらと表示されるだけなのでファイルに出力したいという場合、
Export-Csvコマンドレットを使用すると結果をCSV形式にして保存してくれる。

Get-ChildItem "フォルダ名" | Export-Csv "出力ファイル名"


のように"|"(パイプ)でGet-ChildItemの結果をExport-Csvに渡すとファイルを出力してくれる。


この時オプションとして-Encoding Defaultを設定しないとASCIIでエンコードされるので全角文字が化ける。
なんでかは...ググッてください。


この他、
Where-Objectコマンドレットを使用すると様々な条件で一覧取得ができる。
たとえばフォルダを除外する、あるサイズ以上のファイルを列挙する、ある拡張子のものを除外する、など。

Select-Objectコマンドレットを使用すると出力結果として表示する項目を設定できる。

デフォルトではかなり多くの項目が出力されるが、一部だけを出力したいときにはこれで設定する。

どちらも"|"(パイプ)で渡して使用する。


例. サブフォルダも含むファイル一覧を取得し、CSVに出力する。

  ただしフォルダは一覧に含めない。
  出力項目はパス、ファイル名、サイズ、作成日時

Get-ChildItem "調査するフォルダ名" -Recurse -Force | Where-Object {-not $_.PsIsContainer} | Select-Object Directory, Name, Length, LastWriteTime | Export-Csv "出力ファイル" -encoding Default



Where-Objectの使い方はもっと勉強しないとなあ...。