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

使用PowerShell扫描多文件夹查找缺失XYZ地图瓦片报错求解

报错原因

你代码的核心问题是在ForEach-Object迭代块中误用了集合变量:

  • 遍历列目录时,你用了$ColumnDirectories.FullName,这是取整个列目录数组的FullName属性,返回的是数组而非当前迭代的单个目录路径
  • 遍历瓦片文件时,你用了$MapTiles.Name,这是取整个瓦片文件数组的Name属性,返回的是字符串数组,转为int时自然抛出类型转换错误
    ForEach-Object迭代块中需要用$_代表当前正在处理的单个对象。
完整可运行代码
$BasePath = "C:\_test\17\"
$MapServerBaseUrl = "https://somemapsrv.com/17"
$ZoomLevel = "17" # 和基础文件夹对应,可自行修改

# 遍历所有列号目录
Get-ChildItem $BasePath -Directory | ForEach-Object {
    $ColumnNum = $_.Name
    $ColumnDir = $_.FullName
    # 获取当前列下所有png瓦片,转成整数行号存入数组
    $existingRowNums = Get-ChildItem -Path $ColumnDir -Filter *.png -File | ForEach-Object {
        [int]($_.Name -replace '\.png$', '')
    } | Sort-Object # 行号排序,避免顺序错乱导致检测失败

    # 遍历所有现有行号,检测间隔
    for ($i = 0; $i -lt $existingRowNums.Count - 1; $i++) {
        $currentRow = $existingRowNums[$i]
        $nextRow = $existingRowNums[$i + 1]
        # 两个相邻行号差大于1时,中间的都是缺失瓦片
        if ($nextRow - $currentRow -gt 1) {
            # 遍历中间所有缺失的行号
            for ($missingRow = $currentRow + 1; $missingRow -lt $nextRow; $missingRow++) {
                $localSavePath = Join-Path $ColumnDir "$missingRow.png"
                $downloadUrl = "$MapServerBaseUrl/$ColumnNum/$missingRow.png"
                
                Write-Host "发现缺失瓦片:$localSavePath,正在从$downloadUrl下载"
                # 执行下载
                try {
                    Invoke-WebRequest -Uri $downloadUrl -OutFile $localSavePath -ErrorAction Stop
                    Write-Host "下载成功:$localSavePath"
                }
                catch {
                    Write-Host "下载失败:$localSavePath,错误信息:$_"
                }
            }
        }
    }
}
代码说明
  • 自动对每个列目录下的瓦片行号排序,不会因为文件顺序错乱导致检测失效
  • 支持连续多个瓦片缺失的场景,比如30201.png和30205.png都存在时,会自动下载30202、30203、30204三个缺失瓦片
  • 增加了异常捕获,单个瓦片下载失败不会中断整个脚本运行
  • 可以自行修改$BasePath、$MapServerBaseUrl、$ZoomLevel参数适配不同的缩放级别、存储路径和地图服务地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:06