web-dev-qa-db-ja.com

バッチスクリプトの1つの「検索」コマンドで複数の文字列を検索できますか?

ファイル内の文字列を検索するWindowsバッチスクリプトがあります

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

現在、これは私のコードがどのように見えるかです。同じファイルで検索したい新しい文字列を見つけ、それが見つかった場合は同じアクションを実行します。それは%acctg_cyc%という変数に格納されます。1行のコードで両方の文字列を検索できますか?私はこれを試しました:

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

しかし、%acctg_cyc%を無視し、file.txtで「WD6」のみを検索しているようです。 %acctg_cyc%がfile.txtのどこにあるか、そうでないかをテストしてみましたが、両方とも合格しました。

何かご意見は?これをより多くのコード行で実行できることはわかっていますが、今はそれを避けようとしています。多分それは不可能です。

助けてくれてありがとう!

3
intA

findはそれほど強力ではありません。 1つの文字列のみを検索します(2つの単語であっても):find "my string" file.txt文字列を探しますmy string

findstrの方がはるかに強力ですが、使用方法には注意が必要です。

findstr "hello world" file.txt 

helloまたはworld、あるいはその両方を含む行を検索します。

見る findstr /?詳細については。

(findまたはfindstr)を使用すると、1行で両方の単語を検索できます。

find "Word1" file.txt|find "Word2"

ファイルに散在している両方の単語を見つける(findまたはfindstr):

find "Word1" file.txt && find "Word2" file.txt
if %errorlevel%==0 echo file contains both words
10
Stephan

これを使いました。あまりオーソドックスではないかもしれませんが、機能します!ブラウザが閉じるまで待機します

: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
0
user2928048

findstrを複数の/C:引数(検索対象の文ごとに1つ)で試しましたが、私の場合はうまくいきました。したがって、これは1つのファイルで複数の文を検索し、出力をリダイレクトするための私のソリューションです。

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