我有一些进程在目录及其子目录中创建一些大小为0KB的文件
如何使用Windows命令提示符从文件系统中删除文件?
任何单个命令或将执行该任务的脚本都将起作用。
答案 0 :(得分:49)
以递归方式迭代文件:
for /r %F in (*)
找出零长度文件:
if %~zF==0
删除它们:
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 :(得分: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 )