軽く探したところ、TSVかつファイルサイズを取得できるものが見つからなかったので、
作りました。
用途に応じてscriptを書き換えて利用することを想定しています。
例えば、出力カラムの並び変更や増減は、1行書き換えるだけでできます。
PowerShellコードをbat内に書いて実行していますが、深い意味はありません。
listDir.bat
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((gc \"%~f0\"|?{$_.readcount -gt 1})-join\"`n\");&$s" %*&goto:eof
#
# ファイル一覧取得
#
# 出力項目
# ファイル名、ファイルサイズ、更新日付、フルパスディレクトリ名 (属性、親ディレクトリ名、拡張子、フルパス も出力可。コメントアウトしてあります)
# 参考
# http://qiita.com/yjnk/items/a69920748e96272bfd10
# 引数
# パターン1
# 引数指定なし ※リダイレクトするとSJISで出力できる。パターン2も同様
# パターン2
# <検索場所>
# パターン3
# <検索場所> <出力TSVファイル名> ※BOMありUTF-8で出力される
# 注意
# 引数はシングルクォート「'」で囲むのが安全です。囲まない場合、例えば 「(重要)」 というディレクトリを検索しようとしたときにエラーになります。
Param($inname, $outname)
$enc="UTF8"
if ($outname) {
$null | Out-File $outname -Encoding $enc # 空ファイル作成
}
$List=Get-ChildItem $inname -Recurse -File | Select-Object Fullname #-File のかわりに -Directory を指定するとディレクトリのみ取得。指定しないとファイルとディレクトリを取得
foreach($Row in $List)
{
$fullname=$Row.FullName
#$property=Get-ItemProperty $fullname # 指定するファイル名が [.txt だとエラー、 [重要].txt だと失敗してnullが返却されてしまう
$property=Get-ItemProperty -LiteralPath $fullname
$name=$property.Name
$extension=$property.Extension
$timestamp=$property.LastWriteTime
$length=$property.Length
$attributes=$property.Attributes
if ($fullname) {
# フルパスからフルパスディレクトリ名を算出
$dir_fullpath=$(Split-Path $fullname -Parent)
# フルパスディレクトリ名からディレクトリ名を算出
$dir=$(Split-Path $dir_fullpath -Leaf)
} else {
"ERROR : fullname null [" + $Row + "]"
continue
}
# 更新日付の整形
if ($timestamp) {
$timestamp=$timestamp.ToString('yyyy/MM/dd HH:mm:ss')
} else {
"ERROR : timestamp null [" + $Row + "]"
continue
}
# 1行出力
$str="$name`t$length`t$timestamp`t$dir_fullpath"
#$str="$name`t$length`t$timestamp`t$dir_fullpath`t$attributes`t$dir`t$extension`t$fullname`t" # 全カラムの出力テスト用 & テンプレート
#$str="$length" # ファイルサイズ出力テスト用
if ($outname) {
$str | Out-File $outname -Append -Encoding $enc # ファイルへ
} else {
$str # 標準出力へ
}
}