わんすけに聞いてみる PowerShell フォルダ内の情報を管理したい時

フォルダ内の情報を管理したい時

フォルダ内の情報を把握したい場面って結構ありますよね。

 

フォルダツリーが把握できていない時

私は基本、新しいプロジェクトにかかわる時は「ここに共有ドキュメントあるからねー」って言われたら、まず最初にコマンドプロンプトから情報収集します。

ファイルサーバとか、ホスト名からのフルパスになってる時は、コマンドプロンプトからこんなコマンドをサラッと打ちます。

pushd %調査したいフォルダ階層のルートパス%
tree /F > tree_cmd.txt

基本、ファイルサーバみたいに自端末のカレントドライブ以外のフォルダにはcdコマンドでそのままフォルダ移動ってできないんですが、pushdコマンドを使うとファイルサーバのホストをプロンプトのセッション期間だけ一時的に未使用のドライブ(Zドライブとか)を割り当てて、そのままカレントフォルダの移動をしてくれます。

ほんで、treeコマンドに「/F」オプションを付けて以下のフォルダ階層を「ファイル名も含めて」ツリーリストを出力します。「 > tree_cmd.txt」ってコマンドの最後につけることで出力をカレントフォルダの直下に「tree_cmd.txt」っていう名前でテキストファイル作って保存することができます。

 

とりあえず、出力したテキスト見ながら新しい案件とかはドキュメント体系をザックリ把握したりします。

 

フォルダ配下の作成日時・更新日時を管理

全部統括的に管理できるイイ感じの方法がなかったのでPowerShell書いてみた。

以下のコードをFileIndexToCsv.ps1とかって名前付けてPowerShellとして実行する。

$basefldr = Read-Host "スキャンするフォルダを指定して下さい。"
$ymd_date = (Get-Date).ToString("yyyyMMdd")
$CsvName = $basefldr + "\FileIndex_" + $ymd_date + ".csv"

function ExportFolderListCSV($fldr)
{
  $fldritems = Get-ChildItem $fldr
  If($fldritems.Count -ne 0) {
    $fldritems | Select-Object Name, CreationTime, LastWriteTime, Attributes ,FullName | sort CreationTime -Descending | Export-Csv -path $CsvName -Append -Encoding Default
  }

  $subfldr = Get-ChildItem $fldr -Directory
  If($subfldr.Count -ne 0) {
    $subfldr | sort CreationTime -Descending | %{ExportFolderListCSV $_.FullName}
  }
}

If(Test-Path $basefldr) {
  ExportFolderListCSV($basefldr)
} else {
  echo "フォルダが存在しません。"
}

すると、『スキャンするフォルダを指定して下さい。』って入力ボックスがでます。

ここにスキャンしたいフォルダのフルパスを貼り付けて実行すると、少ししてプロンプトが終了すると、入力したフォルダの直下に、「FileIndex_yyyymmdd.csv」っていうファイルが出力されます。

CSVファイルには、指定したフォルダ配下のフォルダ&ファイルの「名前、作成日時、最終更新日、タイプ、フルパス」が項目として出力されてます。

あとは、Excelで開いてタイプでフィルタしてフォルダ or ファイルを眺めるもよし。

フルパスの列を選択して、Excel機能の「区切り位置」から¥記号でデータを区切れば階層ごとにフィルタをかけていくこともできると思います。

 

ホントは、ファイルサイズも一緒に出したかったけど、Lengthってプロパティがファイルアイテムにしかなさそだったから今回は見送り。

とりあえず、こんな管理方法はどでしょか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Related Post