使用windows cmd递归删除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" 如果在批处

我有一个进程,在一个目录及其子目录中创建一些大小为0KB的文件。
如何使用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"
    )