Могу ли я искать несколько строк в одной команде "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