2016-08-04 18 views
2

我想的保存结果-hashfile给一个变量并删除哈希空间

CertUtil -hashfile "path_to_file" MD5 

结果保存到变量中,并删除在命令行命令的散列的空间(更具体,我想在VS 2015 C++的后处理命令行中使用它)。

目前的结果如下:

1)C:\用户\管理员> 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)CertUtil: -hashfile命令成功完成。

我只需要行3) - 将hexa字符串保存到变量,然后删除空格。 非常感谢!

+1

可能[批处理 - 分配命令输出到变量](http://stackoverflow.com/questions/16203629/batch-assign-command-output-to-variable) – aschipfl

+0

可能重复的答案不完整。 – Dom

回答

3

尽管有上述的答案,。典型SETLOCAL enabledelayedexpansion的问题

@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 
+0

我的脚本没有延迟扩展的问题。你是什么意思? – npocmaka

+0

@npockmaka你的脚本没问题,我正在考虑一个直接的解决方案。与你无关,但与OP的问题。 – elzooilogico

+0

@npockmaka我很抱歉,我没有阅读您帖子的最后一行。 _if不想要一个全新的独立脚本,只需使用link_中的最后一个循环即可。无法删除帖子。 – elzooilogico

3

你可以用这个准备使用MD5.bat

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

如果不想要一个全新的独立的脚本,你可以只用最后从环路。

+1

感谢您的链接,这个工作对我来说: '@回响 SETLOCAL enableDelayedExpansion 集 “MD5 =” FOR/F “跳过= 1个令牌= * delims =” %%#在('的certutil -hashfile“ ping.txt“MD5”)do(如果没有定义md5(用于%% Z中的%%#)设置“md5 =!md5!%% Z”)) echo%md5% endlocal' – Dom

+0

我会投票作为接受的答案,如果你提取所需的代码连同链接...你的蝙蝠文件很酷,我只需要没有任何检查的部分。但是,谢谢! :-) – Dom

6

我完全来不及这一点,但如何只使用find摆脱不必要的线路:

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