2015-07-20 5 views
2

У меня есть окна пакетный сценарий, который будет искать строку в файлеМогу ли я искать несколько строк в одной команде «find» в пакетном скрипте?

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

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

Благодарим за помощь!

ответ

6

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

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

findstr "hello world" file.txt 

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

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

Поиск оба слова в одной строке можно с (найти или Findstr):

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

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

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

В 'найти«слово1»file.txt | найти«WORD2»' не кажется, работает. – IGRACH

+0

Также вы можете использовать флаг 'findstr/c:" test1 test2 "' для целых строк. – IGRACH

0

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

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

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

: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 
Смежные вопросы