批处理里面如何删除除了指定文件以外的所有文件

2024-12-04 14:37:15
推荐回答(3个)
回答1:

好像不行吧,看看李圆穗这个
删除一个或数个文件。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

names 指定一个或数个文件或目录列表。通配符可被用来
删除多个文件。如果指定了一个目录,目录中的所
有文件都会被删除。

/P 删除每一个文哪卜件之前提示确认。
/F 强制腔宏删除只读文件。
/S 从所有子目录删除指定文件。
/Q 安静模式。删除全局通配符时,不要求确认。
/A 根据属性选择要删除的文件。
attributes R 只读文件 S 系统文件
H 隐藏文件 A 存档文件
- 表示“否”的前缀

如果命令扩展名被启用,DEL 和 ERASE 会如下改变:

/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。

回答2:

for /f "" %%i in ('dir /b /a-d *.*^|findstr /i /v "a.txt b.doc c.bmp %~nx0"') do (del /f /q %%i 2>nul)

PS:文件名带有空格的文件请纯唯自行手动删除!

==恩楼上的朋友茄裤宏很细心。。我确实没颤册注意加delims=和"%%i"了。。。谢谢提醒===

回答3:

楼上挺厉害的,确实可以。
下面是我最初的。
@echo off
set d=E:\abc\
set a=a.txt& set b=b.doc& set c=c.bmp
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%i in ('dir /b/a-d "%d%"') do (set f=%%~nxi
if not !f!==%a% (if not !f!==%b% (if not !f!==%c% (del /f/s/祥缓咐q "%%~fi"))))
exit
这(set d=E:\abc\)是你的文件夹,会删除除了(a.txt,b.doc和c.bmp)外的所有文件。不包含文件夹

请采用楼上的答案,谨纯其实稍微改一下就好了,有空格也没关系
for /f "delims=" %%i in ('dir /哪皮b /a-d *.*^|findstr /i /v "a.txt b.doc c.bmp %~nx0"') do (del /f /q “%%i” 2>nul)