使用powershell命令批量脚本检查文件夹大小

时间:2018-05-09 07:27:00

标签: powershell batch-file

我是批处理脚本的新手,我的脚本中有一部分错过了。

基本上我想检查特定文件夹(带子文件夹)是否介于特定大小范围之间。该文件夹的正常大小约为200GB,因此我读到您无法检查批处理命令的大小,因为cmd最多只能工作2GB。所以我需要在批处理脚本中使用power-shell命令。 因此,在批处理脚本中,我会检查文件夹大小> 190GB& < 250GB使用power-shell命令,如果命令在想要的范围内,命令将返回一个返回值。

我找到了以下命令:

powershell -ExecutionPolicy Unrestricted -c "{0:N2} MB" -f ((Get-ChildItem C:\patch\to\file -Recurse | Measure-Object -Property Length -Sum -ErrorAction Stop).Sum / 1MB)

如果您只是输入Powershell中的代码,您将获得具有特定文件夹的MB的返回值,但我不知道如何从那里开始。

1 个答案:

答案 0 :(得分:3)

总的来说,我同意PowerShell是更现代,功能更丰富的shell,但如果这不可行:

  • 在PowerShell命令中,您需要使用反斜杠转义双引号,并使用带插入符的管道来防止它们被cmd.exe解释
  • batch需要一个纯整数,因此请将格式说明符\"{0:N2} MB\"更改为\"{0:N0}\"
  • 使用for /f
  • 批量处理另一个命令的输出
:: Q:\Test\2018\05\09\SO_50247759.cmd
@Echo off
Set "Folder=C:\Test"
:: TargetSize in  GB * 1024 = MB
:: _PlusMinus as percent
:: _UpperB, _LowerB  are the calculated bounds
:: you may set bounds to fixed values
Set /A _TargetSize=200*1024, _PlusMinus=5, _Upperb=_TargetSize+_TargetSize*_PlusMinus/100, _LowerB=_TargetSize-_TargetSize*_PlusMinus/100
For /f "delims=" %%S in ('
powershell -Exec Unrestricted -c \"{0:N0}\" -f ((GCI \"%Folder%\" -R^^^|Measure Length -Sum -EA 1^).Sum/1MB^)
') Do Set "FolderSize=%%S"

If %FolderSize% gtr %_UpperB% (
  Echo Size %FolderSize% of %Folder% is greater than upper bound %_UpperB%
  Exit /B 2
) else ( 
  If %FolderSize% lss %_LowerB% (
    Echo Size %FolderSize% of %Folder% is less than lower bound %_LowerB%
    Exit /b 1
  ) 
)
Echo Size %FolderSize% of %Folder% is within lower bound %_LowerB% and upper bound %_UpperB%

示例输出:

> SO_50247759.cmd
Size 173 of C:\Test is less than lower bound 194560