本文最后更新于 2024-07-01T10:26:52+08:00
S.场景
当前文件夹下有若干个文件。我需要批量生成它们的哈希值(Hash)。
只显示主文件名和后缀,不显示所在文件夹路径,每个文件显示三种 Hash:MD5、SHA1、SHA256。如题图(大标题正下方的图、正文第一张大图)所示。
C.冲突
用图形界面软件,没法批量操作。
结合使用 Powershell 的 Get-ChildItem
和 Get-FileHash
命令,可以批量操作,但是 Get-FileHash
一次只能输出一种 Hash,输出格式不符合上图的要求。
Q.问题
我们该怎么办?
A.解决办法
可以用 Powershell 脚本来解决。
在这里,谷月姐用了数组。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12
| $excluded_files = 'Hash.txt','!Write_All_Files_Hashes_to_Hash_txt.ps1','password.txt','readme.txt' $files = @(Get-ChildItem -Name -Exclude $excluded_files) $hashes_md5 = 0..($files.Count - 1) $hashes_sha1 = 0..($files.Count - 1) $hashes_sha256 = 0..($files.Count - 1) If (Test-Path Hash.txt) { Clear-Content Hash.txt } For ($i=0; $i -le ($files.Count - 1); $i++) { $hashes_md5[$i] = (Get-FileHash -Path $files[$i] -Algorithm MD5).Hash $hashes_sha1[$i] = (Get-FileHash -Path $files[$i] -Algorithm SHA1).hash $hashes_sha256[$i] = (Get-FileHash -Path $files[$i] -Algorithm SHA256).hash Write-Output ("File : " + $files[$i]) ("MD5 : " + $hashes_md5[$i]) ("SHA1 : " + $hashes_sha1[$i]) ("SHA256 : " + $hashes_sha256[$i]) `r`n >> Hash.txt }
|
将上述代码另存为 !Write_All_Files_Hashes_to_Hash_txt.ps1
,右击这个 PS1 文件,选择「使用 PowerShell运行」,就会在当前文件夹下生成 Hash.txt
文件。Hash.txt
文件的内容是所有文件的 Hash 值,当然,排除 Hash.txt
和 !Write_All_Files_Hashes_to_Hash_txt.ps1
。
逐句解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| $excluded_files = 'Hash.txt','!Write_All_Files_Hashes_to_Hash_txt.ps1','password.txt','readme.txt'
$files = @(Get-ChildItem -Name -Exclude $excluded_files)
$hashes_md5 = 0..($files.Count - 1) $hashes_sha1 = 0..($files.Count - 1) $hashes_sha256 = 0..($files.Count - 1)
If (Test-Path Hash.txt) { Clear-Content Hash.txt }
For ($i=0; $i -le ($files.Count - 1); $i++) {
$hashes_md5[$i] = (Get-FileHash -Path $files[$i] -Algorithm MD5).Hash $hashes_sha1[$i] = (Get-FileHash -Path $files[$i] -Algorithm SHA1).hash $hashes_sha256[$i] = (Get-FileHash -Path $files[$i] -Algorithm SHA256).hash Write-Output ("File : " + $files[$i]) ("MD5 : " + $hashes_md5[$i]) ("SHA1 : " + $hashes_sha1[$i]) ("SHA256 : " + $hashes_sha256[$i]) `r`n >> Hash.txt }
|
注意:这样生成的 Hash.txt 默认编码是带 BOM 的 UTF-16LE。如果需要跨平台使用,最好用 Notepad3、Notepad++、Emeditor、EditPlus 等专门为程序员开发的文本编辑器转码为不带 BOM 的 UTF-8 格式。
P. 图片来源
题图:自制
头图:Seidenperle from Pixabay