У меня есть сценарий .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"
)