Сохранение результата CertUtil -hashfile в переменную и удаление пробелов хеша

Я хочу сохранить результат

CertUtil -hashfile "path_to_file" MD5

в переменную и удалите пробелы хэша в командной строке (точнее, я хочу использовать это в командной строке постобработки в VS 2015 C++).

В настоящее время результат выглядит следующим образом:

1) C: \ Users \ admin> CertUtil -hashfile ping.txt MD5
2) MD5 хеш файла ping.txt:
3) 4f 75 c2 2c 20 b4 81 54 72 2c a5 7c 95 7a 66 88
4) CertUtil: -hashfile команда успешно выполнена.

Мне просто нужна линия 3) - сохранить строку гекса в переменную, а затем удалить пробелы. Большое спасибо!

7 ответов

Решение

Несмотря на ответ выше, типичная локальная проблема включения или задержки расширения

@echo off
setlocal enabledelayedexpansion
set /a count=1 
for /f "skip=1 delims=:" %%a in ('CertUtil -hashfile "ping.txt" MD5') do (
  if !count! equ 1 set "md5=%%a"
  set/a count+=1
)
set "md5=%md5: =%
echo %md5%
endlocal
exit/B

Я полностью опоздал на это, но как насчет использования find для избавления от нежелательных строк:

 CertUtil -hashfile "path_to_file" MD5 | find /i /v "md5" | find /i /v "certutil"

Используйте команду powershell:

$(CertUtil -hashfile C:\TEMP\MyDataFile.img MD5)[1] -replace " ",""

С этим вы можете использовать готовый MD5.bat:

call MD5.bat  "path_to_file" md5_var
echo %md5_var%

Если вам не нужен совершенно новый отдельный скрипт, вы можете просто использовать последний цикл for по ссылке.

Простая фильтрация любых строк, содержащих символы, отличные от буквенно-цифровых.

      CertUtil -hashfile "path_to_file" MD5 | findstr /R "[0-9][a-z]"

MD5.bat работает блестяще. Я бы просто добавил следующее в верхнюю часть.

установить размер файла=%~z1

если %filesize% меньше 1 (

      if "%~2" neq "" (
    endlocal && (
        set "%~2=0"
    ) 
) else (
    echo 0  
)
goto :eof

)

certUtil плохо работает с пустыми файлами и возвращает ошибку. Проверка размера файла на наличие пустых файлов позволяет вам в этом случае вернуть ноль или любую строку, которую вы хотите, если файл пуст.

Я использую следующееchecksum.batфайл:

      @echo off
setlocal

REM Wrapper over built-in Windows utility `certutil` that removes spaces

set FILE_NAME=%~1
set CHECK_SUM=%~2

set RESULT=
for /f "delims=" %%s in ('certutil -hashfile "%FILE_NAME%" %CHECK_SUM% ^| find /i /v "%CHECK_SUM%" ^| find /i /v "certutil"') do (
    call :remove_spaces "%%s"
)

echo %RESULT%

exit /b

:remove_spaces
set SUM=%~1
set RESULT=%SUM: =%
exit /b

Пример использования:

      >checksum.bat some_file.zip SHA256
debea8cf24b93b6c34ec06bd4d85f4bc3b710d596419acbce25928e88e2805d0
Другие вопросы по тегам