バッチ作成の練習のため、下記のような「test」フォルダを作成し、
C:.
│ test-a.txt
│ test-b.txt
│
└─test2
│ test-a - 1.txt
│ test-c.txt
│
└─test3
test-a - 2ー.txt
test-d.txt
ファイル名に「a」のつくものは中身が「1」でそれ以外のファイルは適当な数字を入れています。
powershellで指定したフォルダの中のすべてのファイルのハッシュ値を比較して異なる絶対パスのファイルにハッシュ値の一致するファイルがあったら、その組み合わせをテキストファイルに出力するプログラムを作成しているが、指定したフォルダの絶対パスを入力した後にエラーもなく動作もなくなった。
実現したいこと
現在の問題を解決して無事にファイルの重複を知らせるテキストファイルを出力させたい。
発生している問題・エラーメッセージ
特になし 処理が終了しない。
該当のソースコード
powershell 5.1.19041.1320
$Folder_a = read-host 確認したいフォルダのパスを入力してください。
$PWD = get-location
[int]$i=0
[int]$j=0
$Path_a =@(get-childitem $Folder_a -recurse -Filter *.txt | select-object fullname)
$Hash_a =@(get-childitem $Folder_a -recurse -Filter *.txt | get-filehash -Algorithm MD5 | select-object hash)
if ($Path_a.length -ne $Hash_a.length)
{
echo "パスの総数とハッシュの総数が一致しません、処理を終了します。"
exit
}
else
{
while ($i=0 -le $Path_a.length-1) { [int]$j= 0 while ($j=0 -le $Path_a.length-1) { if ($Hash_a[$i] -eq $Hash_a[$j] -and $i -ne -$j) { echo $Path_a[$i] $Path_a[$j] >> $PWD\"重複".txt $j++ } else { $j++ } } $i++ }
}
試したこと
処理が終わらなかったためctrl+Cで中断後、「$Path_a」と「$Hash_a」を確認するとそれぞれ格納されていることを確認、
「$Path_a」
C:\Users\test\test-a.txt
C:\Users\test\test-b.txt
C:\Users\test\test2\test-a - 1.txt
C:\Users\test\test2\test-c.txt
C:\Users\test\test2\test3\test-a - 2ー.txt
C:\Users\test\test2\test3\test-d.txt
「$Hash_a」
C4CA4238A0B923820DCC509A6F75849B
C20AD4D76FE97759AA27A0C99BFF6710
C4CA4238A0B923820DCC509A6F75849B
202CB962AC59075B964B07152D234B70
C4CA4238A0B923820DCC509A6F75849B
81DC9BDB52D04DC20036DBD8313ED055
また、一見ハッシュ値が一致しているように見える値が等しいか確認すると
PS C:\Users\ユーザー名> $Hash_a[0] -eq $Hash_a[4]
False
PS C:\Users\ユーザー名> $Hash_a[0] -eq $Hash_a[2]
False
PS C:\Users\ユーザー名> $Hash_a[0] -eq $Hash_a[0]
True
となり、インデックスの値が一致しないとtrueにならないことを確認した。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
初めての利用で書き方が違っていたら申し訳ありません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。