MS-DOS命令删除除一个文件外的所有文件


25

是否有MS-DOS命令允许我删除除一个文件以外的所有文件?

以以下文件为例:

a.001  
a.002  
a.003  
a.exe  
a.c  

是否有删除所有文件的命令a.c

Answers:


36

您可以使用forif命令完成此操作:

for %i in (*) do if not "%~i" == a.c del "%~i"

它遍历当前目录,并将每个文件名与ac进行比较。如果不匹配,则删除该文件。


+1从未想过使用它进行简单的删除...这里有很多不错的答案!
William Hilsum'2

4
@Wil,当您开始for定期使用时,会想到各种疯狂的情况。:)
凯文(Kevin)2010年

4
@Mike,您希望执行“对于(A:\ Some \ Path \ *)中的%i,如果不是%〜nxi == ac del%i”的操作,请注意,该路径以*结尾,以获取该文件夹中的文件,并且比较是针对%〜nxi(没有路径的名称)。对于这种破坏性的for循环,最好在执行“ for ... do if ... del%i”命令之前执行“ for ... do echo%i”以查看将影响哪些文件。
凯文

1
更好地使用del "%i"
Mugen

1
如果您需要该IF语句不区分大小写,请将其更改为IF /I
JEP

16

您可以将文件设置为只读,然后再删除所有内容

attrib +r a.c
del *.*
attrib -r a.c

10

不,没有。我要创建一个目录,将重要文件复制到其中,然后擦除,然后将文件移回。然后删除临时文件。

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1粗略并且从技术上讲@Feiht小偷说,这样做是更好的方法(所以在那里也给了+1),但是为了速度,这就是我要这样做的方法。
William Hilsum'2

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
[]有什么好处?
barlop 2011年

1
@barlop:%f文件名中可以​​有空格。
paradroid 2011年

@paradroid no,如果[4 r] == [4 r] echo等于,那将无济于事,我已经看到一些人做过类似的事情,例如使用。代替 []。我能猜出为什么,但我宁愿从做这件事的人那里听到。
barlop 2011年

@barlop:我不知道您在那输入的内容,但是方括号的作用就像引号一样。
paradroid 2011年

@paradroid C:\>如果[4 r] == [4 r] echo abc <ENTER>给出结果“ r] == [4这一次是意外的。” 而C:\> if“ 4 r” ==“ 4 r”回声abc给出结果abc。那么,是什么让您认为它们在任何形式上都像引号一样起作用?即使C:\>如果[ab] == [ab] echo abc <-不起作用,也会产生类似错误。b] == [a此时是意外的。那么,是什么让您认为它们像引号一样工作呢?
barlop 2011年

1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d

如果解释了它的作用,我认为这可能会有所帮助。看起来它遍历了整个文件夹树,这就是我想要的。%app_path%%file%是要遍历的树的根,以及避免删除的文件。什么是^,为什么我们将每个文件四个令牌传递给Del命令?
LarsH

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.