Entfernen Sie alle JPG-Dateien in einem Verzeichnis, **außer** denen, die in einer Textdatei angegeben sind

Entfernen Sie alle JPG-Dateien in einem Verzeichnis, **außer** denen, die in einer Textdatei angegeben sind

Ich würde alle .jpg Dateien in einem Verzeichnis löschen,außerdie in einer Textdatei (z. B. test.txt) angegeben sind.
Diese Textdatei enthält eine Liste mit einigen tausend Dateinamen, die genau denen entsprechen, die ichhalten.
Es ist auchessentielldass nur die Dateinamen, die das Symbol enthalten, ^für die Entfernung berücksichtigt werden.
Mit anderen Worten, alle Dateien ohne Zirkumflex sollten von diesem Skript nicht einmal für die Entfernung berücksichtigt werden.

Unten sehen Sie ein Beispiel für den Inhalt der Textdatei.

1022SS^BLACK.jpg
1022SS^BROWN.jpg
1022SS^DK GREEN.jpg
1022SS^GREY.jpg
1022SS^MAROON.jpg
1022SS^NAVY.jpg

Gewünschtes Verhalten:

KEEP_GREY.jpg    
KEEP_BLACK.jpg
KEEP_1022SS^BLACK.jpg
KEEP_1022SS^BROWN.jpg
KEEP_1022SS^DK GREEN.jpg
KEEP_1022SS^GREY.jpg
KEEP_1022SS^MAROON.jpg
KEEP_1022SS^NAVY.jpg
DELETE_SS^BLACK.jpg
DELETE_SS^BROWN.jpg
DELETE_SS^DK GREEN.jpg
DELETE_SS^GREY.jpg
DELETE_SS^MAROON.jpg
DELETE_SS^NAVY.jpg

Die Dateien GREY.jpg und BLACK.jpg müssen behalten werden, da der Dateiname KEIN Karottensymbol enthält.

Ich habe auf dieser Site Folgendes gefunden, das genau das Gegenteil bewirkt. Aber es könnte ein guter Anfang für jemanden sein, der weiß, wie das geht:Wie lösche ich Dateien aus einem Ordner mithilfe einer Liste von Dateinamen in Windows?

Antwort1

Überlegen Sie sich das nächste Einzeiler-Beispiel:

cmd /E /V /C for /F "tokens=*" %G in ('dir "SU\Files In\972965\*.jpg" /B /S') ^
do @set "xx=%~nxG" ^& if "!xx:^=€!" NEQ "!xx!" (^
findstr /I /C:"!xx!" "SU\Files In\972965.txt" ^
 ^>NUL ^&^& echo retain "%~fG" ^|^| echo delete "%~fG" ) else echo RETAIN "%~fG"

EINGANG(Verzeichnis und Ausnahmedatei):

==>dir "D:\bat\SU\Files In\972965\" /B /S
D:\bat\SU\Files In\972965\1022SS-YELLOW.jpg
D:\bat\SU\Files In\972965\1022SS^BLACK.jpg
D:\bat\SU\Files In\972965\1022SS^BROWN.jpg
D:\bat\SU\Files In\972965\1022SS^DK GREEN.jpg
D:\bat\SU\Files In\972965\1022SS^GREY.jpg
D:\bat\SU\Files In\972965\1022SS^MAROON.jpg
D:\bat\SU\Files In\972965\1022SS^NAVY.jpg
D:\bat\SU\Files In\972965\1022SS_BLUE.jpg

==>type "D:\bat\SU\Files In\972965.txt"
1022SS^BROWN.jpg
1022SS^DK GREEN.jpg
1022SS^NAVY.jpg
1022SS^PINK.jpg

Ausgabe:

==>cmd /E /V /C for /F "tokens=*" %G in ('dir "SU\Files In\972965\*.jpg" /B /S') do  @set
"xx=%~nxG" ^& if "!xx:^=€!" NEQ "!xx!" (findstr /I /C:"!xx!" "SU\Files In\972965.txt" ^>NU
L ^&^& echo retain "%~fG" ^|^| echo delete "%~fG" ) else echo RETAIN "%~fG"
RETAIN "d:\bat\SU\Files In\972965\1022SS-YELLOW.jpg"
delete "d:\bat\SU\Files In\972965\1022SS^BLACK.jpg"
retain "d:\bat\SU\Files In\972965\1022SS^BROWN.jpg"
retain "d:\bat\SU\Files In\972965\1022SS^DK GREEN.jpg"
delete "d:\bat\SU\Files In\972965\1022SS^GREY.jpg"
delete "d:\bat\SU\Files In\972965\1022SS^MAROON.jpg"
retain "d:\bat\SU\Files In\972965\1022SS^NAVY.jpg"
RETAIN "d:\bat\SU\Files In\972965\1022SS_BLUE.jpg"

==>

Ressourcen(Pflichtlektüre):

verwandte Informationen