将 CertUtil -hashfile 的结果保存到变量并删除散列的空格

问题描述 投票:0回答:7

我想保存

的结果
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)
行 - 将十六进制字符串保存到变量中,然后删除空格。 非常感谢!

windows batch-file command-line certutil
7个回答
20
投票

我完全迟到了,但是使用 find 来删除不需要的行怎么样:

 CertUtil -hashfile "path_to_file" MD5 | find /i /v "md5" | find /i /v "certutil"

4
投票

尽管有上述答案,但典型的 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

4
投票

使用powershell命令:

$(CertUtil -hashfile C:\TEMP\MyDataFile.img MD5)[1] -replace " ",""

3
投票

您可以使用这个准备好使用MD5.bat

call MD5.bat  "path_to_file" md5_var
echo %md5_var%

如果不需要全新的单独脚本,您可以使用链接中的最后一个 for 循环。


0
投票

MD5.bat 工作得非常出色。 我只需将以下内容添加到顶部。

设置文件大小=%~z1

如果%filesize%lss 1(

if "%~2" neq "" (
    endlocal && (
        set "%~2=0"
    ) 
) else (
    echo 0  
)
goto :eof

certUtil 不能很好地处理空文件,并返回错误。 检查空文件的文件大小允许您在这种情况下返回零,或者在文件为空时返回任何您想要的字符串。


0
投票

我使用以下

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

0
投票

简单过滤掉包含字母数字字符以外的任何行

CertUtil -hashfile "path_to_file" MD5 | findstr /R "[0-9][a-z]"
© www.soinside.com 2019 - 2024. All rights reserved.