使用windows cmd递归删除0KB文件
我有一个进程,在一个目录及其子目录中创建一些大小为0KB的文件。使用windows cmd递归删除0KB文件,windows,file,cmd,Windows,File,Cmd,我有一个进程,在一个目录及其子目录中创建一些大小为0KB的文件。 如何使用windows命令提示符从文件系统中删除文件? 执行该任务的任何单个命令或脚本都可以工作。 我只能在访问受限的远程计算机上运行简单的cmd命令和脚本。您可以从中尝试find.exe 对文件进行递归迭代: for /r %F in (*) 查找零长度文件: if %~zF==0 删除它们: del "%F" 总而言之: for /r %F in (*) do if %~zF==0 del "%F" 如果在批处
如何使用windows命令提示符从文件系统中删除文件?
执行该任务的任何单个命令或脚本都可以工作。
我只能在访问受限的远程计算机上运行简单的cmd命令和脚本。您可以从中尝试find.exe
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
或任何阈值
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do (
if %%~Za equ 0 del "%%a"
)
在找到:似乎可以工作,但有一点需要注意:它不会删除名称中包含空格的文件。可能有解决办法,但恐怕批处理不是我的专长。纠正错别字后,这就行了。问题是缺少一个波浪号(~) e、 例如,del“%%a”需要是del“%%~a” 这确实会删除名称中带有空格的文件,因为它将标记括在“双引号”中-另一种方法是使用“短名称”,如第二个示例[%%~sa中所示 @回音 setLocal EnableDelayedExpansion 对于/f“tokens=*delims=“%%a in('dir/s/b/a-d')do( 如果%%~Za eq 0 del“%%~a” ) @回音 setLocal EnableDelayedExpansion 对于/f“tokens=*delims=“%%a in('dir/s/b/a-d')do( 如果%%~Za等于0 del%%~sa
)这对这个目的没有用……在远程机器上工作……因此没有直接访问权限。只能运行cmd命令和脚本。我认为这个答案不应该被否决。它仍然提供了有用的信息,可能是针对稍微不同的上下文。表决结果是无效的。什么版本的Windows?许多版本的Windows包括VBScript可能更灵活…我将使用
for
扫描目录树中的文件,findstr
搜索文件中的“.”模式并删除那些不匹配的。好吧,因为您明确声明空格为标记分隔符for
将标记化。我猜,del“%%a%%b”
应该可以工作。但实际的答案是,除非绝对必要(例如用于排序),否则不应在dir
的输出上使用for/f
.for
本身可以在文件上进行迭代,这样会更加健壮。例如,如果在控制台窗口中选择光栅字体,您的解决方案将不会处理包含在OEM代码页中没有表示形式的Unicode字符的文件名。这些交互很微妙,但我倾向于远离for/f
文件名(完整性)关闭输出的同一命令:如果要禁止打印每个文件的if语句,请使用@if
。我认为此解决方案的问题在于它还删除非常小的文件,而不是空文件。@Foad,if%%~zF==0
将只捕获空文件。@Joey谢谢。用ach替换del可能是个好主意o然后解释风险。如果我在自己的计算机上运行此命令,我会丢失这么多文件。
@echo off
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in ('dir/s/b/a-d') do (
if %%~Za equ 0 del "%%a"
)