我是批处理脚本的新手,我的脚本中有一部分错过了。
基本上我想检查特定文件夹(带子文件夹)是否介于特定大小范围之间。该文件夹的正常大小约为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的返回值,但我不知道如何从那里开始。
答案 0 :(得分:3)
总的来说,我同意PowerShell是更现代,功能更丰富的shell,但如果这不可行:
\"{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