1

我有一个非常简单的 .bat 脚本来清理文件夹中的 0 字节文件:

@echo off
FORFILES /P "E:\Path" /C "CMD /C IF @FSIZE==0 del @FILE /Q"

问题是,它正在删除不是 0 字节的文件,并且还删除了子文件夹中的所有文件,即使我没有使用 /S 开关。

4

2 回答 2

1

你可以这样做for

@echo off
for /r %%A in (*.*) do if %%~zA==0 del "%%~fA" /q

这样,您将循环查找目录和子目录中的每个文件,并使用%%~zvar(在这种情况下%%~zA) 获取其大小。

然后,使用 anif查看大小是否等于 0 字节。如果是,它将删除空文件。

于 2020-07-28T17:53:38.850 回答
0

这是另一种方法,它使用来选择 0 字节文件作为In命令。我发现选择该块中的所有文件而不是逐一过滤该Do部分中的所有文件更有效。

如果您只删除顶级目录本身中的那些:

@For /F Tokens^=1* %%G In ('^""%__AppDir__%Robocopy.exe" "E:\Path" NULL /L /NC /NDL /NJH /NJS^|"%__AppDir__%findstr.exe" /RC:"^[\   \ ]*0[\ ]"^"')Do @Del /A/F "%%H"

或者,如果您想删除子目录中的那些,只需在命令中添加/S选项:Robocopy.exe

@For /F Tokens^=1* %%G In ('^""%__AppDir__%Robocopy.exe" "E:\Path" NULL /L /NC /NDL /NJH /NJS /S^|"%__AppDir__%findstr.exe" /RC:"^[\    \ ]*0[\ ]"^"')Do @Del /A/F "%%H"

只是为了确保板格式不会破坏上述示例,匹配应该是:
^[\TAB\SPACE]*0[\TAB]

于 2020-07-28T19:56:28.593 回答