我需要批量批处理脚本来检查文件夹的大小。 如果达到某个X GB,例如:10 GB,则应该删除其中的所有子目录或文件。
我知道在Linux中这将是一件简单的工作。 但是我很不熟悉windows服务器和写批处理脚本。
目前我正在运行一个脚本,每次运行时删除文件/文件夹,就像这样
set folder="C:\myfolder" cd /d %folder% for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
但是,我想删除文件/文件夹只有当它达到一些GB的大小,例如10或12 GB。
在Windows服务器上使用PowerShell。 然后找到文件夹的大小:
$size = (Get-ChildItem $FolderName -Recurse | Measure-Object -Property Length -Sum).Sum if ($size > $Limit) { Remove-Item $FolderName -Recurse -Whatif }
有一个非常好的解释,为什么PowerShell比一组unix工具更有用,作为PowerShell准备好替换Windows上的Cygwin shell的最佳答案?
-Whatif
使Remove-Item
安全,因为添加-Whatif
如果只是报告命令将执行的操作。
对于批量解决方案
@echo off setlocal enableextensions disabledelayedexpansion rem 12345678901234567890 set "pad= " for %%a in ("%~f1.") do set "target=%%~fa" set "limit=%~2" if not defined limit set "limit=10737418240" echo(Searching in [%target%] .... for /f "tokens=3" %%a in (' dir /s /-c /a "%target%" ^| findstr /i /r /c:"^ .*bytes$" ') do set "size=%%a" set "limit=%pad%%limit%" set "size=%pad%%size%" echo( echo(.... limit [%limit:~-20%] echo(.... size [%size:~-20%] echo( if "%size:~-20%" lss "%limit:~-20%" ( echo Size is in range goto :eof ) echo(Size is out of range. Cleaning .... pushd "%target%" && ( rem rmdir . /s /q popd )
此批处理文件使用两个参数:第一个是要处理的文件夹(默认情况下是当前文件夹),第二个是要检查的大小限制(默认情况下为10GB)。
用于检索指定文件夹下的完整大小的dir
命令。 这个命令的输出是用for /f
来解析的,以获得所需的数据。
批处理文件算术限制为最大值2 ^ 31。 为了在条件下处理更大的值,需要将数字转换为填充字符串进行比较。
该脚本仅回应信息到控制台。 您将需要取消注释应删除目标文件夹的内容的rmdir
命令。
On Error Resume Next Set fso = CreateObject("Scripting.FileSystemObject") 'make a new folder to delete Set f = fso.CreateFolder("c:\New Folder") 'wait 30 secs to you can see it in explorer wscript.sleep 30000 'Checking size Set fldr = fso.GetFolder("c:\new folder") Msgbox fldr.size If fldr.size > 100000000000 then msgbox "too large" fldr.delete
VBScript是为此而设计的。