errolevel внутри для цикла в пакетном скрипте - PullRequest
0 голосов
/ 16 октября 2019

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

Проблема: **** когда я запускаю этот код на своем локальном компьютере (Windows 10), я вижу, что логика выполняется нормально, и значение ERRORLEVEL всегда устанавливается в соответствии с последней командой, выполненной внутри цикла for. Но когда я запускаю точно такой же сценарий на другом компьютере, где также размещается много других сценариев .cmd. Я всегда вижу, что значение ERRORLEVEL всегда равно 1, независимо от того, найдена ли строка в последней строке или нет !!!! ****

Может кто-нибудь подсказать мне, что здесь не так?

SetLocal EnableDelayedExpansion
SET cmd[0]=%TABCMD% refreshextracts ....... --no-certcheck --timeout 1200
SET cmd[25]=%TABCMD% refreshextracts ........--no-certcheck --timeout 1200

SET attempt[0]=1
SET attempt[1]=2

SET count=0

@echo off

for /F "tokens=2 delims==" %%s in ('set cmd[') do (
    SET /A "fail = 1"
    for /F "tokens=2 delims==" %%a in ('set attempt[') do (
        if !fail! equ 1 (

            ECHO  "excecute  the tabcmd  command"

            %%s >>%LOGFILE% 2>>&1
            echo "ERROR LEVEL OF REFRESH COMMAND RUN IS %errorlevel%"
            if not %errorlevel%==0 (set errmsg=Unable to logon  & goto Problem)

            echo "entering another for loop for checking last line from the logfile"
            @echo off
            for /f "usebackq delims=" %%b in (%LOGFILE%) do set lastline=%%b
            echo !lastline! >> %LOGFILE%
            echo !lastline! | findstr /I /R /C:"Finished refresh of extracts" >nul
            if !errorlevel!==0 (
                SET /A "fail = !fail! + 1"
                echo "ERRORLEVEL OF FINDING STRING is !errorlevel! " >> %LOGFILE%
            )
        )


        ECHO "lets logout and retry once more to refresh"

        if not !errorlevel!==0 (if %%a equ 1 (
                echo "ERRORLEVEL OF FINDING STRING is !errorlevel! " >> %LOGFILE%
                %TABCMD% logout >> %LOGFILE%
            ))

        ECHO "lets check the log inthe second attempt and decide if to send out error email or not"

        if not !errorlevel!==0 (if %%a equ 2 (
                echo !lastline! >> %LOGFILE%
                echo !lastline!| findstr /I /R /C:"Not queuing a duplicate" >nul
                echo "ERRORLEVEL OF FINDING STRING is !errorlevel! " >> %LOGFILE%
                if  !errorlevel! neq 0 (

                    set errmsg=refresh was failure
                    call :erroremail !count!
                )))
    )
    SET /A "count = !count! + 1"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...