嗨,我正在Windows环境中执行这个蝙蝠
for /f "usebackq" %%i in (hostname) DO SET host=%%i
for /R c:\Users\ %%G IN (*.jpg) DO (
echo %host% >> output.txt
certutil -hashfile "%%G" MD5)
我得到了这个输出
Hostame
Hahs MD5 of the file <file> is
<hash>
CertUtil: -hashfile command executed
我需要帮助,所以我可以格式化输出,如:
<hostname>,,<File>,,<hash>
答案 0 :(得分:1)
@echo off
setlocal enableextensions disabledelayedexpansion
for /f "delims=" %%a in ('hostname') do set "host=%%a"
>output.txt (
for %%z in (*.jpg) do for /f "delims=" %%a in ('
certutil -hashfile "%%z" MD5 ^| find /v ":"
') do echo %host%,,%%z,,%%a
)
您可以使用%computername%
代替执行hostname
来检索计算机名称,但是:
执行for /f
命令的第一个hostname
现在包含delims=
子句以确保(我认为这不是必需的,但只是为了确定)将会有不拆分机器名称中的空格。此外,要执行的命令用单引号括起来
内部for /f
将处理certutil
命令的输出。还包括delims=
以检索完整的MD5行(在这种情况下是一个要求,因为输出是两个十六进制字符的单独列表)。 cerutil -hashfile
的输出还包括被删除的信息行,将输出管道输出到find
命令以删除带冒号的行(存在于信息行而不是散列中)
迭代文件的完整for %%z
和执行for /f
的内部certutil
已重定向到输出文件。这将只打开输出文件一次,将发送到标准输出流的内部命令的所有输出发送给它。