@echo off
findstr /N . input.txt | findstr /I ^2.*alive$ > NUL
IF %ERRORLEVEL% EQU 0 (Echo Hi) ELSE (Echo Hello)
pause
Этот пакет читает в вашем текстовом файле с ключом /N
, который ставит число перед каждой строкой, например:
1:This is a test,
2:and I am alive
3:Not?
Новый текст передается во второй findstr, который использует шаблон RegEx ^2.*alive$
чтобы найти строку, которая начинается с 2
и заканчивается alive
. Это была сложная часть.
Так как findstr устанавливает свой уровень ошибки равным 0, если найдено хотя бы одно совпадение, мы можем использовать простое выражение IF для отображения "Hi" или "Hello".
Партия в деталях
findstr
ищет строки в файлах
/N
ставит номер строки перед каждой строкой
.
подстановочный знак для любого отдельного символа. Он говорит findstr, чтобы искать все
|
это команда pipe Выход из первой команды передается как вход для второй
/I
приказываю findstr искать без учета регистра, чтобы были найдены оба слова:"Живой" и "Живой"
^
является термином RegEx и обозначает начало строки
.*
является термином RegEx и обозначает неопределенное количество символов
$
является термином RegEx и обозначает конец строки
> NUL
скрывает вывод findstr, поэтому соответствующая строка не отображается в окне CMD
IF condition (command) ELSE (command)
является простым условием IF
%ERRORLEVEL% EQU 0
- это код выхода findstr. "EQU" расшифровывается как "equel"
Изменить (пример взят из комментария OP ниже)
- Ваш "Жив" не на 2-й строке. Это 5-й
После "Alive" три пробела в вашем примере, так что alive$
не совпадает
Замените ^2.*alive$
на 5.*alive
. Или даже лучше ^5.* Alive $
Обратите внимание на пробелы.