Windows Serverのフォルダ内のファイルのリストが欲しい。
もちろん、サブフォルダの中も。
そして、フォルダのパスとファイルの更新日時、サイズの情報も。
Treeコマンドだと、ファイル名しか取得できなので、Dirコマンドで何とかしたいのだが・・・。
> tree /F c:\test
色々、試してみて下記のコマンドだと、一応欲しい情報がすべて取得できるのだが、結果の出力がいまいち。
> dir c:\test /b /a-d /s
仕方がないので最終的に下記のコマンドの実行結果をCSV形式のファイルに編集するスクリプトを作成しました。
> dir c:\test /a-d /s /oen
せっかくなので勉強がてらWindows PowerShellに挑戦しました。
できたのがこちら。
###############################################################################
# Dirコマンドの結果をCSVファイルへ出力する
# > dir [対象パス] /a-d /s /oen
#
# 実行コマンド
# > .\ConvDirListToCsv.ps1 [入力ファイルパス] [出力ファイルパス]
###############################################################################
# 引数の数を確認
if ($args.length -eq 0) {
Write-Host "引数が指定されていない"
exit 1
} elseIf ($args.length -gt 2) {
Write-Host "引数が多すぎ"
exit 1
}
# 入力ファイルの存在確認
if (!(Test-Path $args[0])) {
Write-Host $args[0] "は存在しません"
exit 1
}
# 出力先のファイルの存在確認
if (Test-Path $args[1]) {
Write-Host $args[1] "は存在してます"
exit 1
}
# 出力ファイルを生成
New-Item $args[1] -type file
# 定数の設定
set-variable -name DIR_STR -value "のディレクトリ" -option constant
set-variable -name TOTAL_STR -value "ファイルの総数:" -option constant
set-variable -name BYTE_STR -value "バイト" -option constant
set-variable -name NOTUSE_STR -value "バイトの空き領域" -option constant
# 変数の初期化
$getpath = ""
$putStr = ""
# 入力データを編集
foreach ($row in Get-Content $args[0]) {
if ($row.EndsWith($DIR_STR)) {
$getpath = ($row.Substring(0, $row.IndexOf($DIR_STR))).Trim()
} elseIf (($row.EndsWith($TOTAL_STR)) -Or ($row.EndsWith($BYTE_STR)) -Or ($row.EndsWith($NOTUSE_STR))) {
# 対象外の文字列なのでスルー
} else {
if (!($row -eq "") -And !($getpath -eq "") ) {
$putstr = $getPath + "," + $row.Substring(36, $row.length - 36) + "," + $row.Substring(0, 10) + `
"," + $row.Substring(12, 5) + "," + (($row.Substring(18, 18).Trim()).Replace(",", ""))
Add-Content $args[1] $putstr
}
}
}
取得した状態はこんな感じ。
c:\test のディレクトリ 2016/12/14 23:10 0 テストテスト.docx 2015/10/11 03:07 1,745 aaaa.log 2015/09/06 02:46 122 abcabc.txt 3 個のファイル 1,867 バイト c:\test\xyz のディレクトリ 2016/12/14 23:13 567 テストテストのショートカット.lnk 1 個のファイル 567 バイト c:\test\名前が日本語フォルダ のディレクトリ 2016/12/14 23:12 0 bitbit.bmp 2016/12/14 23:12 8,860 exexex.xlsx 2 個のファイル 8,860 バイト c:\test\名前が日本語フォルダ\三階層目のフォルダ のディレクトリ 2016/12/14 23:11 8,860 サンサン.xlsx 1 個のファイル 8,860 バイト ファイルの総数: 7 個のファイル 20,154 バイト 0 個のディレクトリ 107,506,352,128 バイトの空き領域
出力結果はこんな感じ。
c:\test,テストテスト.docx,2016/12/14,23:10,0 c:\test,aaaa.log,2015/10/11,03:07,1745 c:\test,abcabc.txt,2015/09/06,02:46,122 c:\test\xyz,テストテストのショートカット.lnk,2016/12/14,23:13,567 c:\test\名前が日本語フォルダ,bitbit.bmp,2016/12/14,23:12,0 c:\test\名前が日本語フォルダ,exexex.xlsx,2016/12/14,23:12,8860 c:\test\名前が日本語フォルダ\三階層目のフォルダ,サンサン.xlsx,2016/12/14,23:11,8860
一応、これでCSV形式になるのでOKかな。