@echo off
findstr /N . input.txt | findstr /I ^2.*alive$ > NUL
IF %ERRORLEVEL% EQU 0 (Echo Hi) ELSE (Echo Hello)
pause
Esse lote lê seu arquivo de texto com a opção /N
, que coloca um número na frente de cada linha, como:
1:This is a test,
2:and I am alive
3:Not?
O novo texto é canalizado para o segundo findstr , que usa o padrão RegEx ^2.*alive$
para encontrar uma linha que começa com 2
e termina com alive
. Essa foi a parte difícil.
Como findstr define seu nível de erro como 0 se pelo menos uma correspondência for encontrada, podemos usar uma instrução IF simples para ecoar "Hi" ou "Hello".
Lote em detalhes
-
findstr
procura por strings em arquivos -
/N
coloca um número de linha na frente de cada linha -
.
é um curinga para qualquer caractere único. Ele diz findstr para procurar por tudo -
|
é o comando do canal. A saída do primeiro comando é passada como entrada para o segundo -
/I
diz a findstr para pesquisar sem distinção entre maiúsculas e minúsculas, pelo que "Alive" e "alive" são ambos encontrados -
^
é um termo RegEx e representa uma linha que começa -
.*
é um termo RegEx e representa um número indefinido de caracteres -
$
é um termo RegEx e representa uma linha que termina -
> NUL
oculta a saída findstr para que a linha correspondente não seja exibida na janela do CMD -
IF condition (command) ELSE (command)
é uma condição IF simples -
%ERRORLEVEL% EQU 0
é o código de saída do findstr. "EQU" significa "equel"
Editar ( exemplo tirado do comentário do OP abaixo)
- Seu"Vivo" não está na segunda linha. É o quinto
-
Depois de "Alive", existem três espaços no seu exemplo, por isso
alive$
não corresponde aAltere
^2.*alive$
para5.*alive
. Ou melhor ainda^5.* Alive $
Observe os espaços.