たぶん、この問題は、これらのfindstr
のスイッチを組み合わせた非常に単純な方法で解決することができます:検索文字列が見つからないときに結果を表示/ V、およびちょうど名前のファイルのを表示/ M;それは、次のとおりです。
@echo off
setlocal
cd C:\Users\admin\Desktop\bat
for /F "delims=" %%a in ('findstr /ipvm /c:"importantWord" *.txt') do del "%%a"
は残念ながら、組み合わせの/ Vと/ Mスイッチが正常に動作しません:/ Vの結果はライン(ないファイル)に基づいており、内ので修正方法が必要とされている:
@echo off
setlocal
cd C:\Users\admin\Desktop\bat
rem Create an array with all files
for %%a in (*.txt) do set "file[%%a]=1"
rem Remove files to preserve from the array
for /F "delims=" %%a in ('findstr /ipm /c:"importantWord" *.txt') do set "file[%%a]="
rem Delete remaining files
for /F "tokens=2 delims=[]" %%a in ('set file[') do del "%%a"
このメソッドは、ファイルの名前だけfindstr
コマンドレポートので、特に大きなファイルで、効率的で、最初の文字列が一致した後、検索を停止します。
ありがとうございます。 shoud私は* .txtファイルのみを指定しますか? – stupid
* .txtのために私の答えを編集しました。 – MichaelS