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

У меня есть пакетный скрипт 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» в файле .txt. Я попытался проверить, где %acctg_cyc% находится в файле .txt, а когда нет, и оба раза он проходит.

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

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


person intA    schedule 20.07.2015    source источник


Ответы (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
person Stephan    schedule 20.07.2015
comment
find "word1" file.txt|find "word2" не работает. - person IGRACH; 20.07.2017
comment
Также вы можете использовать флаг findstr /c:"test1 test2" для целых строк. - person IGRACH; 23.07.2017

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

findstr /C:"the first search" /C:" a second search " /C:"and another" sourcefile.txt > results.txt
person Piemol    schedule 04.12.2017
comment
Спасибо, как раз то, что мне было нужно. Я обнаружил, что он также работает для передачи вывода из другой программы (файл не нужен) с использованием some_program.exe | findstr /C:"first" /C:"second" - person Willie; 05.08.2020
comment
Вы также можете сделать это следующим образом: some_program.exe | findstr первая секунда. Если вы хотите найти строку в первую секунду, используйте синтаксис some_program.exe | findstr/C: первая секунда - person dstroupe; 20.03.2021

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

: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
person user2928048    schedule 05.03.2018