.bat 文件用于查找驱动器上所有大于 X 的文件

.bat 文件用于查找驱动器上所有大于 X 的文件

到目前为止,我运行一个.bat 文件来查找存储在我们学生共享驱动器上的所有媒体文件,然后将其写入我的文档中的.txt 文件,例如:

dir S:*.mp3 /s > “M:\logs\student\mp3.txt”

这可能不是最好的方法,我知道 2008 R2 中可能有更好的工具可以为我做到这一点。我现在正在尝试找到一种方法来仅记录大于 100mb 的文件。这可以在 .bat 文件/cmd.exe 中实现吗?我最好使用 PowerShell,还是使用 Server 2008R2 中的功能?

答案1

@echo off
rem only files bigger than %threshold% MB are listed
set threshold=100

for /r %%F in (*) do call :foo %%~zF "%%F"
goto :eof

:foo
set size=%1
set size_mb=%size:~0,-6%
if not defined size_mb set size_mb=0
if %size_mb% GTR %threshold% echo.%~2
goto :eof

不幸的是,这个子程序是必要的,因为延迟扩展不想要我提取兆字节的方式(是的,确实是兆字节,而不是兆比字节 - 我也不喜欢它,但它在这里是最简单的)。

请注意,对于大于大约 2 EB 的文件,此方法将会失败,因为cmd无法对无法放入有符号 32 位整数的值进行数字比较。

代码也可以找到在我的 SVN 存储库中

答案2

你最好使用find

答案3

PowerShell 或 VBScript 是最佳选择。我尝试过使用 Shell 脚本执行的操作,但最终会执行大量 for() 和 findstr 调用,从大小中删除逗号等。

VBScript 有 FileSystemObject - 用谷歌搜索一下。

PowerShell 具有 get-childitem:

Get-childitem -LiteralPath <basepath> -Filter *.mp3 -recurse -erroraction silentlycontinue | where-object{ $_.length -gt 100MB }

以上操作扫描路径<basepath>和所有子目录中大于 100MB 的 MP3。

然后您可以添加到“管道”:

| foreach-object{ //dosomething }

powershell 在线帮助非常好;get-help get-childitem -detailed例如,尝试一下:。

祝您编写脚本愉快!

哦,别忘了 Win2k8 有“文件服务器资源管理器”——一个很棒的工具。

相关内容