在 Win10 中,寻找方法在命令提示符或批处理文件中通过管道将 DIR 命令的输出作为 CERTUTIL 命令的输入。IOW,我想获取与 DIR 命令匹配的所有文件的 MD5 哈希。
以下命令确实会生成E:\Temp文件夹中所有文件的裸列表:
C:\Users\RAS>dir "E:\Temp" /b
但是,当我按照以下命令进行管道传输时,会收到一条错误消息:
C:\Users\RAS>dir "E:\Temp" /b | CertUtil -hashfile %~f1 MD5
CertUtil: -hashfile command FAILED: 0x80070002 (WIN32: 2 ERROR_FILE_NOT_FOUND)
CertUtil: The system cannot find the file specified.
user1686 在Windows Vista 管道输出到 attrib 命令中的回答表明某些命令(如 ATTRIB)不将文件名作为输入,但我认为这与这里无关。
Cliff Armstrong 在获取字符串哈希并最终将其与哈希进行比较的答案看起来很有希望,但我不知道如何将每个完全限定的文件名传递给 CERTUTIL。另外,我没有使用 PowerShell 的经验,如果可能的话,我希望使用批处理文件获得解决方案。
谢谢,
德国之声
考虑到
Dir
不会将他自己的输出放在正确的参数中以供使用CertUtil
,并且CertUtil
不会将Dir
重定向的输入放置在正确的位置(正确的位置/参数顺序)以使用它。如果您尝试将
for /f
循环与where
命令一起使用,而不是dir /b
(它不会导致完整的文件路径),这将导致完整的文件路径,您可以在以下位置使用输出循环变量Certutil
:如果您只需要输出中的 MD5 字符串,请添加
|find/v ":"
:您还可以使用 For / r 以更简单和递归的方式执行此操作,与类似链接的问题中使用的相同:
一些进一步的阅读:
[√]哪里
[√]哪里(PowerShell 中的 pswhere)
[√] CertUtil
[√] CertUtil 的更多技巧
[√]循环
[√]重定向
[√] CMD/蝙蝠字符串操作
[√] Base64 编码或解码 (MacOS/Windows/Linux)