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

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

Ветеран


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

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


Цитата Burning Hell:
Сейчас тестировал этот момент и обнаружил, что даже если в целевом файле найдено хотя бы одно слово из трех (например, первое), то уже выводится "Found". »
Именно так.

Цитата Burning Hell:
Как сделать, чтобы "Found" выводилось только при нахождении всех трех слов (логическое "И")? »
Можно, конечно, сделать и одним findstr, но уж больно монструозно будет, поскольку потребует 6 (3! = 6) перестановок:
Код: Выделить весь код
type "%full_log_path%" | >nul 2>&1 findstr.exe /i /r /c:"word1.*word2.*word3" /c:"word1.*word3.*word2" /c:"word2.*word1.*word3" /c:"word2.*word3.*word1" /c:"word3.*word1.*word2" /c:"word3.*word2.*word1" && echo Found || echo Not found
А для 4 слов понадобится уже 4! = 24 перестановки, что не есть хорошо и правильно.

Посему проще будет так:
Код: Выделить весь код
set /a bFound = 0

type "%full_log_path%" | >nul 2>&1 find.exe /i "word1" && set /a bFound = 1
type "%full_log_path%" | >nul 2>&1 find.exe /i "word2" && set /a bFound = 1
type "%full_log_path%" | >nul 2>&1 find.exe /i "word3" && set /a bFound = 1

if "%bFound%" equ "1" (
	echo Found
) else (
	echo Not found
)
Можно усложнить, убрав лишние проходы:
Код: Выделить весь код
set /a bFound = 0

type "%full_log_path%" | >nul 2>&1 find.exe /i "word1" && (
	type "%full_log_path%" | >nul 2>&1 find.exe /i "word2" && (
		type "%full_log_path%" | >nul 2>&1 find.exe /i "word3" && set /a bFound = 1
	)
)

if "%bFound%" equ "1" (
	echo Found
) else (
	echo Not found
)
Ни то, ни другое не проверялось (оставляю это Вам).

P.S. Интересно, то будет в этом случае:
Код: Выделить весь код
type "%full_log_path%" | >nul 2>&1 findstr.exe /i /v /l /c:"word1" /c:"word2" /c:"word3" && echo Not found || echo Found
Опять же, не проверялось.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:07, 07-08-2017 | #49