2017-05-09 3 views
1

Ich bin neu in Batch Scripting. Ich brauche alle Dateien in einem Ordner zu löschen, dass NICHT ein Wort in der Datei enthältBatch-Skript zum Löschen von Dateien in einem Ordner, der kein bestimmtes Wort enthält

dieser Code

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

So fand wie ich WHITE Liste können diese Dateien und alle anderen löschen? Oder ich denke, es gibt einen einfachen Weg mit nur überprüfen, wenn enthält und löschen aber ich weiß nicht wie?

Antwort

0

sollte diese Arbeit:

@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" 
    ) 
) 

Sie den richtigen Pfad zu dem Ordner, von dem Sie die Dateien löschen möchten gesetzt und für ImportantWord mit der Unter Sie suchen zu ersetzen.

+0

Danke, es funktioniert. Wo soll ich nur * .txt Dateien angeben? – stupid

+0

Bearbeitete meine Antwort nur für * .txt. – MichaelS

0

Angeblich könnte dieses Problem auf eine sehr einfache Art und Weise diese findstr Schalter Kombination gelöst werden:/V, die Ergebnisse zeigen, wenn der Suchbegriff nicht gefunden ist, und/M, die zeigen nur der Name der Dateien; das heißt:

@echo off 
setlocal 
cd C:\Users\admin\Desktop\bat 
for /F "delims=" %%a in ('findstr /ipvm /c:"importantWord" *.txt') do del "%%a" 

Leider ist die Kombination von/V und/M-Schalter nicht richtig funktionieren: das Ergebnis/V basiert auf Linien (nicht Dateien), so dass eine Änderung in der Verfahren benötigen:

@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" 

Diese Methode effizient ist, vor allem bei großen Dateien, da findstr Befehl Bericht nur die Namen der Dateien und nach dem ersten String Match Suche zu stoppen.

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 

Nicht wirklich sicher, was Sie mit /p Dateien tun möchten - Dateien mit nicht-ANSI-Zeichen erscheinen Error 1 für diese zurückzukehren. if not errorlevel 1 wird Echo die Dateien, die nicht die erforderliche Zeichenfolge enthalten - entfernen Sie die echo, um tatsächlich die Datei (en) zu löschen

Verwandte Themen