在 PowerShell 中满足规范的代码非常简单——如果你真的只需要“失败”。
虽然最简单的版本(首先显示)没有指明故障位置,但底部有一个简单的增强建议,用于过滤故障目录:
$BasePath = 'C:\' # Parent of the 2017 directory
# *\*\* --> MONTHS\DAYS\FILES
$totals = dir "$BasePath\2017\*\*\*" -file |
Group-Object directoryname -noElement |
measure count -minimum -maximum -sum
IF ($Totals.Sum -ne 3650 -or $Totals.Maximum -ne 10 -or $Totals.Minimum -ne 10) {
"FAIL"
} else {
"Succeed"
}
$Totals # just show the totals if you wish
搜索路径中的 3 个星号是三个目录级别的通配符::MONTH 级别、DAY 级别和 FILES。 2017***
许多 PowerShell cmdlet 允许在路径规范的多个“目录”元素中使用完整的通配符。
- MONTH 级别(一年中的 12 个月)
- DAY 级别(28-31 取决于月份)
- 文件级别(每个应为 10)
最终的文件模式可以更改为“*.log”之类的内容,或者任何与正确添加的文件匹配的内容。
每个 'day' 目录应该有 10 个文件,而 2017 年有 365 天 * 10 个文件/天,因此预期总数为 3650(如果您需要检查 2016 年或 2020 年等,可以轻松添加闰年检查。 )
如果显示,组对象输出(对于我的“C:\Program Files”目录)如下所示:
Count Name
----- ----
203
12 C:\Program Files\7-Zip
3 C:\Program Files\Appli...
18 C:\Program Files\Beyon...
4 C:\Program Files\Bonjour
20 C:\Program Files\Class...
...
Measure-Object 输出(存储在 $Totals 中)如下所示:
Count : 41
Average :
Sum : 747
Maximum : 203
Minimum : 1
Property : Count
由于每个目录必须有 10 个文件,每个目录都应该有 10 个目录名称(在 GROUP-OBJECT 计数中),因此 MINIMUM 和 MAXIMUM 都必须为 10。
您可以通过使用
过滤 Group-Object 结果来识别失败的目录
| Where-Object Count -ne 10
享受吧。