如何使用 robocopy 递归列出所有超过一定大小的文件?

如何使用 robocopy 递归列出所有超过一定大小的文件?

我觉得自己很傻,因为 robocopy 是服务器管理 101;但我似乎在列出文件时遇到了问题。

我希望列出目录和子目录中所有大小超过 10MB 的文件。

根据文档,这应该是有效的:

robocopy c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl

但是当我运行它时,会返回一个错误“未指定目标目录”,如果您使用列表(/ L)选项,我认为没有必要出现这个错误。

另外,如果我包含与目标相同的目录,如下所示:

robocopy c:\ c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl

没有返回任何内容;但是如果我删除无目录列表(/ndl),我会看到所有目录的列表。

所以我的问题是:如何使用 robocopy 在目录树结构中列出超过 10MB 的文件,仅此而已?

谢谢!

答案1

如果您不受限制robocopy,您可以使用for的变量替换来实现这一点:-

@for /f "tokens=*" %F in ('dir /s /b /a:-d c:\') do @(
    if %~zF geq 10485760 echo %F
)

dir /s /b /a:-d c:\为您提供裸格式 ( ) 下/s所有非目录 () 的递归列表 ( ),以便于解析。/a:-dc:\/b

for循环该列表("tokens=*"如果路径中带有空格则需要),并让您~z在任何子命令中使用其变量修饰符来获取文件大小的引用(例如if与您想要的大小进行比较)。

' s@用于抑制命令的回显,如果您@echo off之前调用过(例如,在批处理文件中),则可以省略。

答案2

尝试将 %tmp% 目录作为目标。我没有旧版本的 robocopy 可供测试,但我记得 /l 实际上列出了它将要做什么而不仅仅是文件。因此,您需要将数据“发送”到不存在的地方,以便 robocopy 打印出目标位置上不存在的所有文件和目录。

答案3

你可以看看删除。它在处理文件大小和日期方面具有一些非常强大的功能。它可以在“测试”模式下运行以生成匹配列表,而不是实际执行文件删除。

答案4

使用 Robocopy,除非您正在使用 /QUIT 创建模板作业文件(这会阻止 robocopy 执行除检查语法之外的任何其他操作)并使用 /NODD 代替目标目录,否则您始终需要指定目标目录,即使您只是列出。获取文件列表的方法是创建一个空文件夹,例如在 TEMP 下,并将其指定为目标。它将是空的,因此源中的每个文件都会显示在列表中。然后在完成后删除 temp 下的文件夹 - 它应该是空的。

相关内容