PhowerShellでフォルダ内のファイルハッシュを取得する
はい。ズバリどん。
ISEのスクリプトウィンドウの方に以下貼り付け。
do{
$path = Read-Host "対象パスを入力してください"
}while(!(Test-Path $path) )cd $path
$here = Convert-Path .
$file = Join-Path (Split-Path -Parent $here) ("md5_" + (Split-Path -Leaf $here) + ".txt")
echo $file
$hash = Get-ChildItem -File -Recurs | Get-FileHash -Algorithm MD5 | Sort-Object Path
$hash | foreach {
$_.Algorithm + "," + $_.Hash + "," + $_.Path.Replace($here,".")
#$_.Algorithm + "`t" + $_.Hash + "`t" + (Resolve-Path -Relative $_.Path)
} | Out-File -FilePath $file
結構いろいろやっていて、
- 対象パスを入力させる。
- 作業フォルダ以下にあるすべてのファイルのmd5ハッシュを再帰的に取得する。
- ファイルのフルパス名順に並べ替える。
- ハッシュ取得結果のフルパスを作業フォルダからの相対パスに置換する
- タブ区切りな。(スペースとかカンマとかあんま好かんす)
- 作業フォルダ名をもじったファイル名を作成しそこに出力
絶対パスを相対パスに置き換えるとこ、最初は置換でやってたけど専用コマンドレットに置き換えてコメントアウト。Resolve-Pathだとパスに"["や"]"が含まれるとワイルドカード扱いされて正しく動作しないので、Replaceに戻す。(2019-08-10)