Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Burning Hell,
Вот мой вариант AND для произвольного числа искомых слов в файле
Код: Выделить весь код
@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
Iska, А зачем при поиске нужен конвейер
Код: Выделить весь код
type "%full_log_path%" | >nul 2>&1 find.exe
type "%full_log_path%" | >nul 2>&1 findstr.exe
Когда можно напрямую сослаться на файл "%full_log_path%" в find.exe и findstr.exe ?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 21:06, 07-08-2017 | #51