我想保存
的结果CertUtil -hashfile "path_to_file" MD5
到变量并删除命令行命令中散列的空格(更具体地说,我想在 VS 2015 C++ 后处理的命令行中使用它)。
目前结果如下:
1) C:\Users dmin>CertUtil -hashfile ping.txt MD5
2) 文件 ping.txt 的 MD5 哈希值:
3) 4f 75 c2 2c 20 b4 81 54 72 2c a5 7c 95 7a 66 88
4)证书实用程序: -hashfile 命令成功完成。
我只需要
3)
行 - 将十六进制字符串保存到变量中,然后删除空格。
非常感谢!
我完全迟到了,但是使用 find 来删除不需要的行怎么样:
CertUtil -hashfile "path_to_file" MD5 | find /i /v "md5" | find /i /v "certutil"
尽管有上述答案,但典型的 setlocalenabledelayedexpansion 问题
@echo off
setlocal enabledelayedexpansion
set /a count=1
for /f "skip=1 delims=:" %%a in ('CertUtil -hashfile "ping.txt" MD5') do (
if !count! equ 1 set "md5=%%a"
set/a count+=1
)
set "md5=%md5: =%
echo %md5%
endlocal
exit/B
使用powershell命令:
$(CertUtil -hashfile C:\TEMP\MyDataFile.img MD5)[1] -replace " ",""
您可以使用这个准备好使用MD5.bat:
call MD5.bat "path_to_file" md5_var
echo %md5_var%
如果不需要全新的单独脚本,您可以使用链接中的最后一个 for 循环。
MD5.bat 工作得非常出色。 我只需将以下内容添加到顶部。
设置文件大小=%~z1
如果%filesize%lss 1(
if "%~2" neq "" (
endlocal && (
set "%~2=0"
)
) else (
echo 0
)
goto :eof
)
certUtil 不能很好地处理空文件,并返回错误。 检查空文件的文件大小允许您在这种情况下返回零,或者在文件为空时返回任何您想要的字符串。
我使用以下
checksum.bat
文件:
@echo off
setlocal
REM Wrapper over built-in Windows utility `certutil` that removes spaces
set FILE_NAME=%~1
set CHECK_SUM=%~2
set RESULT=
for /f "delims=" %%s in ('certutil -hashfile "%FILE_NAME%" %CHECK_SUM% ^| find /i /v "%CHECK_SUM%" ^| find /i /v "certutil"') do (
call :remove_spaces "%%s"
)
echo %RESULT%
exit /b
:remove_spaces
set SUM=%~1
set RESULT=%SUM: =%
exit /b
使用示例:
>checksum.bat some_file.zip SHA256
debea8cf24b93b6c34ec06bd4d85f4bc3b710d596419acbce25928e88e2805d0
简单过滤掉包含字母数字字符以外的任何行
CertUtil -hashfile "path_to_file" MD5 | findstr /R "[0-9][a-z]"