格式化CMD命令的输出

时间:2016-10-13 16:05:32

标签: windows batch-file

嗨,我正在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>

1 个答案:

答案 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已重定向到输出文件。这将只打开输出文件一次,将发送到标准输出流的内部命令的所有输出发送给它。