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

mbr*_*nyc 5 windows robocopy

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

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

根据docs,这应该是有效的:

robocopy c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl
Run Code Online (Sandbox Code Playgroud)

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

另外,如果我像这样包含与目标相同的目录:

robocopy c:\ c:\ /min:10485760 /s /l /fp /tee /log:c:\robocopy.log /njh /njs /ndl
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

Kan*_*nji 3

如果您不依赖于robocopy,您可以通过使用 的for变量替换来实现这一点:-

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

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

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

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