«неожиданная» ошибка при выполнении файла bat - PullRequest
0 голосов
/ 06 октября 2018

Я получаю эту ошибку

Z:\Utilities>Test.bat
    -10314679.html: was unexpected at this time.
Z:\Utilities>

при выполнении этого файла bat

@echo off
SETLOCAL EnableExtensions EnableDelayedExpansion

for /f "tokens=1 delims=@" %%A in (_HashList-1.tmp) do (
    call set myParam="%%A"
    call :myParseLine %%myParam%%
)
exit /b

:myParseLine
    call set myParam=%~1
    call set myPartLine=%myParam:~0,8%
    if "%myPartLine%" == "MD5 hash" ( 
        call set myPartLine=%myParam:~12%
        exit /b 
    )
exit /b

Файл _HashList-1.tmp содержит

MD5 hash of z:\Church\Messages\Emails\19981112-The Stranger- You got to read this.... (fwd)-10314679.html:
966b538d0f52fc66bbb7ef4fd98ec1ca
CertUtil: -hashfile command completed successfully.

Любая подсказкачто я делаю не так?

Если я закомментирую строку

call set myPartLine=%myParam:~12%

, то это сработает.Мне нужно обратиться к «myParam», чтобы выполнить дальнейшую обработку.

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

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Ошибка происходит в этом блоке кода

if "%myPartLine%" == "MD5 hash" ( 
    call set myPartLine=%myParam:~12%
    exit /b 
)

Ошибка возникает, когда значение переменной myParam равно:

MD5 hash of z:\Church\Messages\Emails\19981112-The Stranger- You got to read this.... (fwd)-10314679.html:

Эта строка:

    call set myPartLine=%myParam:~12%

расширяется до

    call set myPartLine=z:\Church\Messages\Emails\19981112-The Stranger- You got to read this.... (fwd)-10314679.html:

) в (fwd) преждевременно закрывает ваш блок IF, и анализатор видит -10314679.html: как ошибку.

Вы можете предотвратить этоошибка, заключив ваше назначение в круглые скобки следующим образом:

    call set "myPartLine=%myParam:~12%"

) будет заключен в кавычки, поэтому он не закроет заключенный в скобки блок

Но ваш код - горячий беспорядок, которыйдействительно должен быть полностью переработан (переписан).Очевидно, что вы выбрали фрагменты методов пакетного кодирования, не понимая, что они делают, как и когда и когда их применять.Например:

  • Включение отложенного расширения без его использования
  • Использование CALL без необходимости / ненадлежащим образом

У меня есть идеи, как более аккуратно реализовать вашелогика существующего кода.Но я не уверен, что ваша логика на самом деле то, что вы хотите, поэтому я неохотно делаю попытку очистки вашего кода.

0 голосов
/ 06 октября 2018

Вот базовый пример одного метода, который должен работать со всеми файлами в текущем каталоге, выводя результаты в текстовый файл, hashes.txt.

Из командной строки:

For %A In (*) Do @For /F "Delims=" %B In ('CertUtil -hashfile "%A" MD5 2^>Nul^|Find /V ":"') Do @(Echo=%A: %B)>>"hashes.txt"

Из пакетного файла:

@For %%A In (*) Do @For /F "Delims=" %%B In ('CertUtil -hashfile "%%A" MD5 2^>Nul^|Find /V ":"') Do @(Echo=%%A: %%B)>>"hashes.txt"

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

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