2017-05-09 8 views
1

バッチスクリプトを初めて使用しています。私はこのコード特定の単語が含まれていないフォルダ内のファイルを削除するバッチスクリプト

@echo off 
setlocal 
pushd C:\Users\admin\Desktop\bat 
findstr /ip /c:"importantWord" *.txt > results.txt 
popd 
endlocal 

は、だから私はホワイトリストには、このファイル、および他のすべてのを削除することができますどのように見つかったファイル

でいくつかの単語が含まれていないことをフォルダ内のすべてのファイルを削除する必要がありますか? また、!にが含まれていて、 が含まれているかどうかを確認するだけの簡単な方法があると思います。

答えて

0

これは動作するはずです:

@ECHO OFF 
SETLOCAL EnableDelayedExpansion 
SET "pathToFolder=C:\FolderToEmpty" 
SET "wordToSearch=ImportantWord" 
FOR /F "tokens=*" %%F IN ('dir %pathToFolder% /b *.txt') DO (
    findstr /IP %wordToSearch% "%pathToFolder%\%%F">nul 
    IF !ERRORLEVEL!==1 (
     DEL /Q "%pathToFolder%\%%F" 
    ) 
) 

をあなたはからファイルを削除すると、あなたが探している部分文字列でImportantWordを交換したいフォルダへの適切なパスを設定する必要があります。

+0

ありがとうございます。 shoud私は* .txtファイルのみを指定しますか? – stupid

+0

* .txtのために私の答えを編集しました。 – MichaelS

0

たぶん、この問題は、これらの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コマンドレポートので、特に大きなファイルで、効率的で、最初の文字列が一致した後、検索を停止します。

0
@echo off 
setlocal 
set "targetdir=C:\Users\admin\Desktop\bat" 
pushd %targetdir% 
for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
findstr /i /p /v /c:"importantWord" "%%a" >nul 
if not errorlevel 1 echo del "%%a" 
) 
popd 
endlocal 

あなたは/pファイルで何をしたいのか本当にわからない - ANSI以外の文字を含むファイルは、これらのためのERRORLEVEL 1を返すように見えます。 if not errorlevel 1は、必要な文字列を含まないファイルをエコーし​​ます。実際にファイルを削除するにはechoを削除してください。

関連する問題