使用Windows命令行递归删除0KB文件

23

我有一些进程会在一个目录及其子目录中创建一些0KB大小的文件。
如何使用Windows命令提示符从文件系统中删除这些文件?
任何一个能够完成任务的单个命令或脚本都可以工作。


我只能运行简单的cmd命令和脚本,而且受到访问限制的远程机器上进行操作。


1
Windows的哪个版本?许多版本的Windows都包括VBScript,这可能更加灵活... http://www.suite101.com/content/windows-scripting-command-line-vbscript-a83052 - Klinky
我会使用 for 命令扫描目录树以查找文件,使用 findstr 命令搜索文件中的 "." 模式并删除不匹配的文件。 - Constantin
4个回答

53
  1. 递归迭代文件:

    for /r %F in (*)
    
  2. 查找零长度文件:

  3. if %~zF==0
    
  4. 删除它们:

  5. del "%F"
    

把它们整合在一起:

for /r %F in (*) do if %~zF==0 del "%F"

如果您需要在批处理文件中使用此命令,那么您需要将%符号加倍:

for /r %%F in (*) do if %%~zF==0 del "%%F"

注意:我假设你的意思是长度恰好为 0 字节的文件。如果你所指的 0 KB 意味着任何小于 1000 字节的文件,则上面的 if 需要更改为 if %~zF LSS 1000 或其他你设定的阈值。


1
同样的命令关闭输出:https://dev59.com/8nXYa4cB1Zd3GeqP3jax#18014912 - Antonio
如果你想要抑制每个文件中if语句的打印,请使用@if - Kip
我认为这个解决方案的问题在于它也会删除非空的非常小的文件。 - Foad S. Farimani
1
@Foad,if %%~zF==0 只会捕获空文件。 - Joey
@Joey 谢谢。用 acho 替换 del 可能是个好主意,然后解释一下风险。如果我在自己的电脑上运行这个命令,我会丢失很多文件。 - Foad S. Farimani
我尝试了 %%~zF==0,但与文件资源管理器中的 size:empty 搜索相比,结果仍然不同。 - Foad S. Farimani

2
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do (
if %%~Za equ 0 del "%%a"
)

来源于: 链接文本 看起来很有效,但有一个小问题:它无法删除文件名中带有空格的文件。可能有一种解决方法,但很抱歉,批处理不是我的长项。


既然你明确声明空格为标记分隔符,for将会进行标记化。我猜,del "%%a %%b"应该可以工作。但实际答案是,除非绝对必要(例如用于排序),否则不要在dir的输出上使用for /ffor本身可以迭代文件,并且以这种方式更加健壮。例如,如果控制台窗口选择了光栅字体,则你的解决方案无法处理包含OEM代码页中没有表示的Unicode字符的文件名。这些交互虽然微妙,但我倾向于远离for /f来处理文件名。 - Joey

0

当纠正了一个错别字时,这个程序可以正常工作。问题是缺少了波浪号(~),例如,del "%%a" 需要改为 del "%%~a"

由于将令牌括在“双引号”中,因此这确实会删除名称中带有空格的文件 - 另一种方法是使用“短名称”,如第二个示例所示[ %%~sa

@echo off setLocal EnableDelayedExpansion for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do ( if %%~Za equ 0 del "%%~a" )

@echo off setLocal EnableDelayedExpansion for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do ( if %%~Za equ 0 del %%~sa )


-1
你可以尝试从UnxUtils中使用 find.exe。
find . -type f -empty -delete

这并不适用于此目的...因为在远程机器上工作...所以没有直接访问。只能运行cmd命令和脚本。 - crodjer
我认为这个回答不应该被踩。它仍然提供了一些有用的信息,可能适用于稍微不同的情境。我点赞以中和它的负面评价。 - crodjer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接