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):
- (Befehlsreferenz)Ein AZ-Index der Windows CMD-Befehlszeile
- (hilfreiche Besonderheiten)Befehlszeilensyntax der Windows CMD-Shell
- (
%~G
usw. Sonderseite)Befehlszeilenargumente (Parameter) - (
%var%
vs.!var!
Spezialseite)EnableDelayedExpansion - (
>NUL
,&
,||
usw. Sonderseite)Umleitung - (
^
Caretzeichen,"
Anführungszeichen"
usw.)Escape-Zeichen, Trennzeichen und Anführungszeichen - (
%variable:StrToFind=NewStr%
usw.)Variable bearbeiten/ersetzen