使用windows cmd递归删除0KB文件

问题描述 投票:0回答:5

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


我只能运行简单的 cmd 命令和脚本,在访问受限的远程计算机上工作。

windows file cmd
5个回答
55
投票
  1. 递归遍历文件:

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

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

    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
或任何您的阈值。


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

发现于:链接文本似乎可以工作,但有一个警告:它不会删除名称包含空格的文件。可能有解决方法,但恐怕批处理不是我的强项。


0
投票

纠正拼写错误后效果很好。问题是缺少波形符 (~) 例如,del "%%a" 需要是 del "%%~a"

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

@回声关闭 setLocal EnableDelayedExpansion for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do ( if %%~Za 等于 0 del "%%~a" )

@回声关闭 setLocal EnableDelayedExpansion for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do ( if %%~Za 等于 0 del %%~sa )


0
投票

如何撤消他们对答案一所做的删除?有很多我不想删除的文件被删除了,但我的 C: 中仍然有很多空文件。


-1
投票

您可以尝试从 UnxUtils 中查找.exe。

find . -type f -empty -delete
© www.soinside.com 2019 - 2025. All rights reserved.