使用Windows cmdrecursion删除0KB文件

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


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

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

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

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

错误纠正后,这工作正常。 问题是缺少代字符(〜),例如,del“%% a”需要被删除“%%〜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)

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

 find . -type f -empty -delete