如何删除目录中的所有文件,但删除文本文件中列出的特定文件名
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
关键字。
我有一个名为 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
关键字。