You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本开发求助:检查多级文件夹结构及指定文件是否存在

PowerShell目录结构校验脚本实现指南

嘿,作为PowerShell新手,你这个目录结构校验的需求其实很常见,我来一步步帮你搭建这个脚本,还会把关键逻辑讲清楚,方便你以后修改调整!

整体思路

咱们的脚本要分四层校验:

  • 第一层:确认根文件夹2017是否存在
  • 第二层:校验根目录下是否正好有12个以Jan到Dec命名的子文件夹
  • 第三层:对每个月份文件夹,校验它下面的天数子文件夹数量是否符合2017年(平年)的对应月份天数
  • 第四层:对每个天数文件夹,检查里面是否包含你指定的10个文件

完整脚本示例

# 定义根文件夹路径,你可以根据实际情况修改
$rootFolder = ".\2017"
# 定义需要检查的10个文件名,这里假设是file1到file10,你替换成自己的文件名即可
$requiredFiles = @("file1.txt", "file2.txt", "file3.txt", "file4.txt", "file5.txt",
                   "file6.txt", "file7.txt", "file8.txt", "file9.txt", "file10.txt")
# 定义2017年(平年)每个月份对应的天数,键是月份名称,值是天数
$monthDayMap = @{
    "Jan" = 31
    "Feb" = 28
    "Mar" = 31
    "Apr" = 30
    "May" = 31
    "Jun" = 30
    "Jul" = 31
    "Aug" = 31
    "Sep" = 30
    "Oct" = 31
    "Nov" = 30
    "Dec" = 31
}

# 第一步:检查根文件夹是否存在
if (-not (Test-Path -Path $rootFolder -PathType Container)) {
    Write-Error "错误:根文件夹 '$rootFolder' 不存在!"
    exit 1
}

# 第二步:检查根目录下的月份文件夹是否符合要求
$monthFolders = Get-ChildItem -Path $rootFolder -Directory | Select-Object -ExpandProperty Name
$expectedMonths = $monthDayMap.Keys | Sort-Object
# 先检查数量是否为12
if ($monthFolders.Count -ne 12) {
    Write-Error "错误:根文件夹下的月份子文件夹数量不符合要求,预期12个,实际找到 $($monthFolders.Count) 个!"
    exit 1
}
# 再检查每个月份名称是否都在预期列表里
foreach ($month in $monthFolders) {
    if ($expectedMonths -notcontains $month) {
        Write-Error "错误:发现未知的月份文件夹 '$month',预期应为 $($expectedMonths -join ', ')!"
        exit 1
    }
}

# 第三步:遍历每个月份文件夹,检查天数子文件夹
foreach ($month in $expectedMonths) {
    $monthPath = Join-Path -Path $rootFolder -ChildPath $month
    $dayFolders = Get-ChildItem -Path $monthPath -Directory | Select-Object -ExpandProperty Name
    $expectedDayCount = $monthDayMap[$month]
    
    # 检查天数文件夹数量是否正确
    if ($dayFolders.Count -ne $expectedDayCount) {
        Write-Error "错误:月份文件夹 '$month' 下的天数子文件夹数量不符合要求,预期 $expectedDayCount 个,实际找到 $($dayFolders.Count) 个!"
        continue # 这里用continue而不是exit,让脚本继续检查其他月份,你也可以改成exit直接终止
    }
    
    # 额外校验:天数文件夹的名称是否是数字(比如1,2,...31)
    foreach ($dayFolder in $dayFolders) {
        if (-not ($dayFolder -match '^\d+$') -or [int]$dayFolder -lt 1 -or [int]$dayFolder -gt $expectedDayCount) {
            Write-Warning "警告:月份 '$month' 下的天数文件夹 '$dayFolder' 名称不符合要求(应为1到$expectedDayCount的数字)!"
        }
    }

    # 第四步:遍历每个天数文件夹,检查指定文件是否存在
    foreach ($day in 1..$expectedDayCount) {
        $dayPath = Join-Path -Path $monthPath -ChildPath $day.ToString()
        if (-not (Test-Path -Path $dayPath -PathType Container)) {
            Write-Error "错误:月份 '$month' 下缺少天数文件夹 '$day'!"
            continue
        }
        
        $missingFiles = @()
        foreach ($file in $requiredFiles) {
            $filePath = Join-Path -Path $dayPath -ChildPath $file
            if (-not (Test-Path -Path $filePath -PathType Leaf)) {
                $missingFiles += $file
            }
        }
        
        if ($missingFiles.Count -gt 0) {
            Write-Error "错误:天数文件夹 '$dayPath' 下缺少以下文件:$($missingFiles -join ', ')!"
        } else {
            Write-Host "成功:天数文件夹 '$dayPath' 下的所有指定文件均存在!" -ForegroundColor Green
        }
    }
}

Write-Host "所有校验完成!" -ForegroundColor Cyan

脚本关键部分解释

  1. 变量定义:

    • $rootFolder:指定你的根文件夹路径,记得改成你实际的路径(比如C:\Data\2017)
    • $requiredFiles:这里列出了你需要检查的10个文件名,直接替换成你实际需要的文件名即可
    • $monthDayMap:因为2017是平年,所以Feb是28天,这个哈希表用来存储每个月份对应的天数,方便后续校验
  2. 根文件夹校验:用Test-Path检查文件夹是否存在,不存在就直接报错退出

  3. 月份文件夹校验:

    • 先获取根目录下的所有子文件夹名称,然后和预期的12个月份对比
    • 既检查数量是否为12,又检查每个名称是否都是合法的月份名
  4. 天数文件夹校验:

    • 对每个月份,先获取它下面的天数文件夹,对比数量是否符合$monthDayMap里的天数
    • 额外加了一个校验:天数文件夹的名称是否是合法的数字(比如不能出现0或者32这样的无效天数)
  5. 文件存在性校验:

    • 遍历每个天数文件夹,逐个检查$requiredFiles里的文件是否存在
    • 如果有缺失,就输出错误信息;全部存在就输出成功提示

自定义调整建议

  • 如果你的文件名不是file1.txt这类,直接修改$requiredFiles数组即可
  • 如果你希望发现错误就立即终止脚本,把continue改成exit 1就行
  • 要是需要把校验结果输出到日志文件,可以在脚本开头加Start-Transcript -Path "校验日志.txt",结尾加Stop-Transcript

内容的提问来源于stack exchange,提问作者user9596467

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:42:42