Форматирование вывода команды CMD

#windows #batch-file

#Windows #пакетный файл

Вопрос:

Привет, я выполняю эту bat в среде 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. Итак, сделайте то, что вы делаете с помощью команды FOR при захвате выходных данных имени хоста. Поместите вашу команду certutil в FOR /F команду и проанализируйте вывод. Затем выведите все в наш файл журнала.

2. Вы понимаете, что могли бы просто использовать переменную среды%имя_компьютера% вместо выполнения команды hostname .

3. Вам не хватает обратных кавычек вокруг имени хоста.

Ответ №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% вместо execute hostname для получения имени компьютера, но:

  • Первое for /f выполнение hostname команды теперь включает в себя delims= предложение для обеспечения (я думаю, что это не нужно, но просто для уверенности), что в имени машины не будет разделения на пробелы. Кроме того, команда для выполнения заключена в одинарные кавычки
  • Внутренний for /f обработает вывод certutil команды. delims= также включено для получения полной строки MD5 (в данном случае это требование, поскольку вывод представляет собой отдельный список из двух шестнадцатеричных символов). Вывод cerutil -hashfile также включает в себя информационные строки, которые удаляются, передавая вывод в find команду для удаления строк с двоеточием (присутствует в информационных строках, а не в хэше)
  • Полные for %%z , которые повторяют файлы, и внутренние for /f , которые выполняются certutil , были перенаправлены в выходной файл. Это откроет выходной файл только один раз, отправив в него все выходные данные внутренних команд, отправленных в стандартный поток вывода.

Комментарии:

1. Большое спасибо. Я только что добавил /R c:Users для %%z для и работал отлично