Могу ли я искать несколько строк в одной команде "find" в пакетном скрипте?

У меня есть пакетный скрипт Windows, который будет искать строку в файле

find /i "WD6"  %Inputpath%file.txt
if %errorlevel% == 0 GOTO somestuff

В настоящее время так выглядит мой код. Я натолкнулся на новую строку, которую хочу найти в том же файле, и сделаю то же действие, если он найдет его, он сохранил его в переменной с именем %acctg_cyc% я могу найти обе строки в одной строке кода? Я попробовал это:

find /i "WD6" %acctg_cyc%  %Inputpath%file.txt
if %errorlevel% == 0 GOTO somestuff

Но, похоже, он игнорирует%acctg_cyc% и ищет только "WD6" в файле file.txt. Я пробовал где тестировать %acctg_cyc% находится в file.txt, и когда это не так, и он проходит оба раза.

Какие-нибудь мысли? Я знаю, что мог бы сделать это в большем количестве строк кода, но я действительно пытаюсь избежать этого прямо сейчас. Может быть, это просто невозможно.

Спасибо за любую помощь!

3 ответа

Решение

find не очень мощный Он ищет только одну строку (даже если это два слова): find "my string" file.txt ищет строку my string,

findstr имеет гораздо больше возможностей, но вы должны быть осторожны, как его использовать:

findstr "hello world" file.txt 

находит любую строку, которая содержит либо hello или же world или оба из них.

увидеть findstr /? для получения дополнительной информации.

Найти оба слова в одной строке можно с помощью (find или findstr):

find "word1" file.txt|find "word2"

найти оба слова, разбросанные по файлу (find или findstr):

find "word1" file.txt && find "word2" file.txt
if %errorlevel%==0 echo file contains both words

Я старался findstr с несколькими /C: аргументы (по одному на каждое искомое предложение), которые добились цели в моем случае. Так что это мое решение для поиска нескольких предложений в одном файле и перенаправления вывода:

findstr /C:"the first search" /C:" a second search " /C:"and another" sourcefile.txt > results.txt

Я использовал это. Может быть, не очень православный, но работает! Это ждет, пока браузеры не отклонят

:do_while_loop
rem ECHO LOOP %result%
rem pause
tasklist /NH | find "iexplore.exe"
set result=%ERRORLEVEL%
tasklist /NH | find "firefox.exe"
set result=%result%%ERRORLEVEL%
if not "%result%"=="11" goto :do_while_loop
Другие вопросы по тегам