如何在 Windows 命令行中查找大于 2gb 的文件?(32 位溢出阻止了众所周知的方法工作)

如何在 Windows 命令行中查找大于 2gb 的文件?(32 位溢出阻止了众所周知的方法工作)

我正在使用以下众所周知的解决方案来递归查找大于指定值的文件:

forfiles /S /M * /C "cmd /c if @fsize GEQ 2000000000 echo @path"

这完全可以正常工作,除非我尝试使用此命令查找大于 2^31 的值。例如

forfiles /S /M * /C "cmd /c if @fsize GEQ 3000000000 echo @path"

有问题,因为它还返回大小为 2310123265 的文件,而不仅仅是大于 3000000000 的文件

我猜测这与 32 位有符号整数算法有关。

问题

我如何搜索大于 3gb 的文件?

答案1

PowerShell 处理大值没有问题:

gci -file -recurse | ? length -ge 3e9
gci -File -Recurse | where Length -ge 3000000000
Get-ChildItem -File -Recurse | where { $_.Length -ge 3000000000 }

要获取路径,请通过 Format-Table 传输结果,但要小心避免截断

... | ft FullName -auto

(这是 PowerShell有问题)

相关内容