powershell - 使用powershell命令批处理脚本检查文件夹大小
问题描述
我对批处理脚本非常陌生,我的脚本中有一个部分遗漏了。
基本上我想检查一个特定的文件夹(带有子文件夹)是否在一个特定的大小范围之间。该文件夹的正常大小约为 200GB,所以我读到您无法在批处理命令中检查大小,因为 cmd 最多只能工作 2GB。所以我需要在批处理脚本中使用 power-shell 命令。因此,在批处理脚本中,我将使用 power-shell 命令检查文件夹大小 >190GB 和 <250GB,如果它在所需范围内,该命令将返回一个返回值。
我找到了以下命令:
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 的返回值,但我不知道如何从那里开始。
解决方案
一般来说,我同意 PowerShell 是更现代且功能更丰富的 shell,但如果这不可行:
- 在您的 PowerShell 命令中,您需要使用反斜杠转义双引号并使用插入符号转义管道,以防止它们被 cmd.exe 解释
- 批处理需要一个纯整数,因此将格式说明符更改
\"{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
推荐阅读
- kubernetes - 如何在 Azure 管道 (VSTS) 中使用 Deploy to Kubernetes 任务的输出变量
- swift - 使用堆栈和导航栏从 AppDelegate 推送到 ViewController
- android - SharedTransitionElement 动画中的 OutOfMemoryError
- r - 通过用其平均值或中值替换每个箱来去除 R 中具有相等深度分箱的噪声
- java - 我们可以创建具有通用返回类型的方法吗?这如何评估在编译时返回哪种类型?
- excel - VBA - 将文件转换为csv格式后缺少完成0的代码
- django - 使用 Django Rest Framework 将输入文件从 Vue.js 发送到 Django 时出现问题
- python - for循环删除不在python数组中的值
- pip - “pip install tox”给出找到现有安装:filelock 2.0.12
- python - 来自相机的 Python OpenCV 流式传输 - 多线程、时间戳