Сохранение результата 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