我正在开发一个PowerShell脚本来计算zip文件的校验和。我必须在W7和W10中都执行它。我注意到certUtil commmand在W7中返回类似A2 5B 8A ...的字符串,但是在W10中它返回相同的字符串但没有空格。因此,我决定删除空格以使其统一,将输出设置为变量,然后删除空格...但是它不起作用。
for /f "delims=" %%f in ('dir %~dp0*.zip /b') do (
echo %%~f:
$result = certUtil -hashfile "%~dp0%%~f" SHA512 | find /i /v "SHA512" |
find /i /v "certUtil"
$result = $result -replace '\s', ''
echo %result%
set /a counter += 1
echo.
)
您知道如何删除它们吗?
答案 0 :(得分:2)
因此在您的示例中,您似乎使用了诸如For,Echo,Set之类的Shell命令,然后又混入了诸如$
之类的powershell命令。由于您说过正在使用Powershell脚本,因此应该使用所有Powershell。
Get-ChildItem "C:\TEST" -Include *.zip -File -Recurse | %{
Get-FileHash $_ -Algorithm SHA512 | select Path, Hash
}
这将获取Test中的所有zip文件,然后使用Get-Filehash,然后使用Sha512算法。返回文件和哈希的路径。
这将需要至少Powershell 4.0
答案 1 :(得分:0)
对于适用于7和10(分别为版本2和5)的内置powershell版本的解决方案,我会坚持使用certutil
。
certutil -hashfile
的第二行输出包含哈希,因此,请像这样抓取
Get-ChildItem -Filter *.zip -Recurse |ForEach-Object {
# call certutil, grab second line of output (index 1)
$hashString = @(certutil -hashfile """$($_.FullName)""" SHA512)[1]
# remove any non-word characters from the output:
[regex]::Replace($hashString,'[\W]','')
}