windows - 在 Windows Server 2008 R2中,批处理脚本

  显示原文与译文双语对照的内容

我需要一个批处理批处理脚本来检查文件夹的大小。 如果达到某些X 值,例如: 10,它应该去删除它里面的所有子目录或者文件。

我知道在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)



但我只想删除文件/文件夹,仅当它达到 10或者 12 GB的大小时。

时间:

在 Windows Server 上,查找文件夹的大小是:


$size = (Get-ChildItem $FolderName -Recurse | Measure-Object -Property Length -Sum).Sum


if ($size> $Limit) {


 Remove-Item $FolderName -Recurse -Whatif


}



PowerShell 可能会比一组unix工具更有用,这是一个非常好的解释,因为准备将我的CYGWIN shell 替换为 Windows 上的

-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


 )



这里批处理文件使用两个参数: 第一个是处理( 默认情况下,当前文件夹)的文件夹,第二个是检查( 默认情况下 10 GB )的大小限制。

用于检索所指示文件夹下的完整大小的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是为此设计的。

...