Как рассчитать хеш-значение конкретного файла в пакетном скрипте? - PullRequest
0 голосов
/ 29 января 2019

Я новичок в пакетном скриптинге, и у меня возникают проблемы в нескольких строках, пытающихся вычислить значение хеш-функции для определенного файла.

Я пишу скрипт для проверки файла, из которого я буду отправлятьодно место в другое.Чтобы убедиться, что файлы идентичны, мне нужно вычислить значение хеш-функции файла перед его отправкой и после его отправки, чтобы сравнить значение хеш-функции и убедиться, что оно идентично.Ниже приведен мой код, который я написал для вычисления и сравнения значения хеш-функции файла.

set original=CertUtil -hashfile \\172.168.101.187\smb\1GBTESTFILE.TXT MD5
set received=CertUtil -hashfile \\172.168.101.188\smb\1GBTESTFILE.TXT MD5
if original==received(
echo no file lost
) else (
echo file lost
)

Я должен ожидать «файл не потерян», однако я получаю «Синтаксис команды неверен».

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы не можете использовать set для сохранения вывода команды в переменную, вам нужно вместо этого использовать for /F loop .Также обратите внимание, что CertUtil возвращает больше, чем просто значение хеш-функции:

rem /* At first, clear variable that is going to receive the hash value;
rem    then use `for /F` to capture the output of `CertUtil`, skipping the first line,
rem    which merely contains the text `MD5 hash of file`, the file name/path and `:`;
rem    the `if defined` line ensures that only the second line of the output is captured,
rem    so the summary line `CertUtil: -hashfile command completed successfully.` is dismissed;
rem    the `2^> nul` part avoids error messages by `CertUtil`: */
set "ORIGINAL=" & for /F "skip=1 delims=" %%H in ('
    2^> nul CertUtil -hashfile "\\172.168.101.187\smb\1GBTESTFILE.TXT" MD5
') do if not defined ORIGINAL set "ORIGINAL=%%H"
rem // Same procedure for the second hash value:
set "RECEIVED=" & for /F "skip=1 delims=" %%H in ('
    2^> nul CertUtil -hashfile "\\172.168.101.188\smb\1GBTESTFILE.TXT" MD5
') do if not defined RECEIVED set "RECEIVED=%%H"
rem /* Conditional actions; regard that you need surrounding `%%` to read variables;
rem    also note the spaces in front of `(`!: */
if "%ORIGINAL%%RECEIVED%"=="" (
    >&2 echo ERROR: no hashes available!
) else (
    if "%ORIGINAL%"=="%RECEIVED%" (
        echo INFO:  hashes match.
    ) else (
        >&2 echo ERROR: hashes differ!
    )
)
0 голосов
/ 29 января 2019

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

md5sum FILE
sha1sum FILE
sha256sum FILE
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...