我想将目录及其子目录中所有文件的 md5 哈希写入文件。理想情况下,复制 unix 命令的输出find . -type f -exec md5sum {} +(即两列:哈希值和相对文件路径)。
我正在查看 CMD 命令,CertUtil -hashfile afile.txt MD5
但我被dir /A:-D /B /S. 我使用 PowerShell 发现了以下响应:https : //superuser.com/a/1249418。我很少使用 CMD,这是我第一次尝试 PowerShell。
Get-FileHash -Algorithm MD5 -Path (Get-ChildItem "*.*" -Recurse | Resolve-Path -Relative | Tee-Object -Variable y) | select hash | Out-File C:\Users\MYUSERNAME\Desktop\MYFOLDER\temphashes.txt
$x = (Get-Content C:\Users\MYUSERNAME\Desktop\MYFOLDER\temphashes.txt).ToLower() | select -skip 3 | ?{$_.Trim(" `t")}
$i = 0; $x | ForEach-Object {($_, $y[$i]) -join " "; $i++} | Out-File C:\Users\MYUSERNAME\Desktop\MYFOLDER\hashes.txt
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来获取 PowerShell(或 CMD)中的哈希值和相对路径?或者至少,中间文件“temphashes.txt”可以被最终输出覆盖吗?
编辑:可以将哈希设为小写,并删除标题和额外的尾随空白行(请参阅我尝试中的第二行),因此文件如下所示:
d41d8ce98f00b204e9800988ecf8427e .\aSubDirectory\anotherfile.txt
4615fd7b904c04e94cbeced23361c778 .\afile.txt
Run Code Online (Sandbox Code Playgroud)
这能让你找到你想要的吗?
$Files = Get-ChildItem "*.*" -Recurse
$Result = ForEach ($File in $Files) {
Get-FileHash $File -Algorithm MD5 | Select-Object Hash,@{N='Path';E={$_.Path | Resolve-Path -Relative}}
}
$Result | Out-File C:\Users\MYUSERNAME\Desktop\MYFOLDER\hashes.txt
Run Code Online (Sandbox Code Playgroud)
解释:
Get-ChildItemin的文件检索到名为$Files.Get-FileHash检索 FileHash,它也将完整路径作为路径返回。Select-Object并仅选择哈希属性,同时使用计算属性Path作为相对路径返回。$Result变量,然后输出到带有Out-File.| 归档时间: |
|
| 查看次数: |
1465 次 |
| 最近记录: |