Код:
@Echo Off
cls
Set /A Iter=0
:Begin
If %Errorlevel%==2 GoTo :Eof
Set /A Iter+=1
Echo +++ Begin %Iter% Iteration
Call :StrDate "DateTime"
Set "LogFile=D:\logs\check_va_lasr_status_%DateTime%.log"
Call "D:\SAS\sas.exe" -sysin "D:\codes\check_va_lasr\check_va_lasr_status.sas" -log "%LogFile%"
Call :get_params_from_main_config "D:\codes\common\init_environment.sas" ""lasr_port" "lasr_host""
Call :IfAND "%LogFile%" "error" "connection" "lasr" "%lasr_port%" "%lasr_host%" && (
Call "D:\SAS\sas.exe" -sysin "D:\codes\check_va_lasr\check_lasr_log_and_run.sas" -nolog
CHOICE /C YN /T 15 /D N /M "Iteration %Iter% finished with Errors. Y - Continue, N - Cancel."
Echo:
GoTo :Begin
) || (
Echo +++ Iteration %Iter% finished successfully
GoTo :Eof
)
GoTo :Eof
:get_params_from_main_config
Set "Key=let"
FOR /F "usebackq tokens=1,2,3 delims==; " %%i IN (`more %1 2^>nul`) DO (
For %%a In (%~2) Do Call :Ident %%a "%%i" "%%j" "%%k"
)
GoTo :Eof
:Ident
If /I %2=="%Key%" If /I %1==%3 Set "%~1=%~4"
GoTo :Eof
:IfAND
>nul 2>&1 findstr.exe /i /l /C:%2 %1 || Exit /B 1
Shift /2
If Not "%2"=="" GoTo :IfAND
Exit /B 0
:StrDate
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET @Tdate=%%d
Set "@Ttime=1%@Tdate:~8,6%"
Set "@Tdate=%@Tdate:~0,4%-%@Tdate:~4,2%-%@Tdate:~6,2%"
If %@Ttime% LSS 1120000 (Set "%~1=%@Tdate%__%@Ttime:~1,2%.%@Ttime:~3,2%.%@Ttime:~1,2% AM" &GoTo :Eof)
Set /A @Ttime=%@Ttime%-120000
Set "%~1=%@Tdate%__%@Ttime:~1,2%.%@Ttime:~3,2%.%@Ttime:~1,2% PM"
GoTo :Eof
где ввызове подпрограммы
Код:
Call :IfAND "%LogFile%" "error" "connection" "lasr" "%lasr_port%" "%lasr_host%"
- в первом аргументе - имя файла "%LogFile%",
- в остальных аргументах -искомые слова в кавычках. Здесь пять слов. Уберите лишние.
Процедура возвращает %ErrorLevel%==0 если все слова найдены, иначе %ErrorLevel%==1