如何删除目录中的所有文件,但删除文本文件中列出的特定文件名

How delete all files in a directory but specific file names listed in a text file

我有一个名为 Demos1 的文件夹,其中包含扩展名为 .replay 的文件。

我在 Demos1 的父文件夹中有一个批处理脚本,还有一个包含我只想保留在名为 namediff.txt.[=18 的文本文件中的文件名的文件=]

我想递归扫描 namediff.txt 中的每个文件名与在目录中找到的文件,如果 namediff.txt 中的文件名(每行一个)与在中找到的文件不匹配目录,删除 Demos1 中的那个文件,只保留 txt 文件中匹配的文件名。

这是我目前所拥有的。

PUSHD "%~dp0Demos1"

:--------------------------------------------------------------------------------------------

FOR /F "TOKENS=*" %%A IN ('DIR /B "*.replay"') DO (
    FOR /F "TOKENS=*" %%G IN ('%%~nxA') DO (
        IF NOT "%%~nxA"=="%%~nxG" ECHO DEL "%%~nxG"
    )
)
 FOR /F "TOKENS=*" %%A IN ('DIR /B /a-d "*.replay" ^|findstr /x /i /v /g:namediff.txt') DO echo del "%%A"

应该这样做。 Findstr 找到 /x 完全匹配 /i case-insensitive /g:filecontainingstringstomatch/v 产生 匹配的行到 dir.

生成的文件列表

需要 ^ 来转义管道,这告诉 cmd 管道是要执行的命令的一部分,而不是 for

/a-d 排除 directory-names 匹配 - 只是一种 belt-and-braces 方法。

del 只是 echo 用于测试目的。确认删除文件后删除 echo 关键字。