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

时间:2010-11-14 09:42:07

标签: windows file cmd

我有一些进程在目录及其子目录中创建一些大小为0KB的文件 如何使用Windows命令提示符从文件系统中删除文件?
任何单个命令或将执行该任务的脚本都将起作用。

<小时/> 我只能运行简单的cmd命令和脚本,在具有受限访问权限的远程计算机上工作。

4 个答案:

答案 0 :(得分:49)

  1. 以递归方式迭代文件:

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

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

    del "%F"
    
  4. 全部放在一起:

    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 :(得分:2)

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

发现于:link text似乎有效,但有一点需要注意:它不会删除名称中包含空格的文件。可能有一种解决方法,但我担心批次不是我的强项。

答案 2 :(得分:0)

您可以尝试UnxUtils中的find.exe。

find . -type f -empty -delete

答案 3 :(得分:0)

纠正拼写错误时,此方法正常。问题是缺少波浪号(〜) 例如,del“%% a”需要为del“%% ~a”

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

@echo off setLocal EnableDelayedExpansion for / f“tokens = * delims =”%% a in('dir / s / b / a-d')do(   如果%% ~Za等于0 del“%% ~a”   )

@echo off setLocal EnableDelayedExpansion for / f“tokens = * delims =”%% a in('dir / s / b / a-d')do(   如果%% ~Za等于0 del %% ~sa   )