Eliminar todos los archivos .jpg de un directorio, **excepto** aquellos especificados en un archivo de texto

Eliminar todos los archivos .jpg de un directorio, **excepto** aquellos especificados en un archivo de texto

Quitaría todos los archivos .jpg de un directorio,exceptoaquellos especificados en un archivo de texto (por ejemplo, test.txt).
Este archivo de texto contiene una lista de miles de nombres de archivos que coinciden exactamente con los que quieromantener.
Tambien esbásicoque los únicos nombres de archivos que incluyan el símbolo ^se incluyan para su eliminación.
En otras palabras, todos los archivos sin intercalación ni siquiera deberían considerarse para su eliminación mediante este script.

A continuación se muestra el ejemplo de lo que hay en el archivo de texto.

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

Comportamiento deseado:

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

Es necesario conservar GREY.jpg y BLACK.jpg porque NO hay símbolo de zanahoria en el nombre del archivo.

Encontré lo siguiente en este sitio que hace exactamente lo contrario. Pero podría ser un buen comienzo para alguien que sepa cómo hacer esto:¿Cómo eliminar archivos de una carpeta usando una lista de nombres de archivos en Windows?

Respuesta1

Piensa en el siguiente ejemplo de una sola línea:

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"

APORTE(directorio y archivo de excepción):

==>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

Producción:

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

==>

Recursos(lectura obligatoria):

información relacionada