Набросаю схематично вариант без forfiles.
Имеем текстовый файл file.txt со списком имен файлов, которые не надо удалять - одно имя файла на каждой строке.
Получить список всех файлов в каталоге можно с помощью
dir /b
Далее этот список отфильтровать, исключая файлы, содержащиеся в file.txt, примерно так:
dir /b c:\test\* | findstr /v /g:file.txt
На выходе по идее должен быть список файлов, которые надо удалить.
Эту команду запихнуть в
for /f "tokens=* delims=" %%a in ('dir ... ^| findstr ...') do (del %%a)
В принципе все.
Проверить все сейчас не могу, т.к. под рукой нет винды, поэтому только общая идея, компоновать придется самому.
За подробностями:
dir /?
for /?
findstr /?
del /?
Рекомендую сначала выполнить связку
dir | findstr
вручную в консоли и добиться, что бы выдавался нужный результат (список файлов для удаления), только затем все это оформлять в батник.