bat文件只为一个文件生成MD5校验和

Bat file to only generate a MD5 checksum for a file

我一直在寻找一种方法来创建一个 bat 文件来生成文件的 MD5 校验和。

我尝试了 fciv 和其他一些方法,但它们都生成了一个包含附加信息(例如路径和文件名等)的文件。我只需要 MD5,不需要其他任何东西。

有人给我指出正确的方向吗?

这个命令行

fciv new.xml -md5 -r -xml new.xml.md5

创建一个包含以下内容的文件:

<?xml version="1.0" encoding="utf-8"?>
<FCIV>
    <FILE_ENTRY><name>new.xml</name><MD5>OuX4jSQyl91+M1fUQZeGtw==</MD5></FILE_ENTRY></FCIV>

我只需要 MD5 校验和。

这是一个非常精简的 certutil 包装器,没有任何 arg/error 检查:

@Echo off
:: Pass the file to hash as the only arg
Set "MD5="
For /f "skip=1 Delims=" %%# in (
  'certutil -hashfile "%~f1" MD5'
) Do If not defined MD5 Set MD5=%%#
Set MD5=%MD5: =%
Echo:%MD5%

输出散列这批本身

b873bbcd93873a6aa320cd64a1751d8a

使用您在问题中展示的 FCIV 工具,您似乎在 XML 中以 base64 格式输出结果,而这不是您所要求的。

您仍然可以像这样使用它来获取名为 new.xml:

的文件的 MD5
For /F "EOL=/" %A In ('FCIV new.xml') Do @Echo(%A

这假设 MD5 仍然是 FCIV 的默认输出并且它是 运行 来自 cmd.exe window 正确 knows/accesses FCIV.exe 的位置

[编辑/]

批处理文件格式的扩展示例。

@Echo Off
Set "MyFile=new.xml"
Set "MD5="
For /F "EOL=/" %%A In ('FCIV "%MyFile%"') Do Set "MD5=%%A"
If Defined MD5 Echo(%MD5%
Timeout -1

单词 new.xml 甚至可以用 %~1 替换,然后您可以将文件拖放到它上面以输出它的哈希值。