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

PowerShell脚本无法正确识别最新修订版本问题咨询

问题排查与修复:PowerShell脚本无法正确识别多位数修订号

问题现象

原脚本用于将格式为“图纸编号_修订号.pdf”的文件最新版本复制到“Latest Drawings”子文件夹,但在多位数修订号场景下识别错误:

  • 案例1:文件AE1.101A_1.pdf、AE1.101A_2.pdf、AE1.101A_3.pdf、AE1.101A_4.pdf、AE1.101A_25.pdf,脚本选中AE1.101A_4.pdf而非AE1.101A_25.pdf
  • 案例2:文件GI0-503_REL 35.pdf、GI0-503_REL 36.pdf、GI0-503_REL 41.pdf、GI0-503_REL 210.pdf,脚本选中GI0-503_REL 41.pdf而非GI0-503_REL 210.pdf
  • 案例3:文件GI0-503_REL 35.pdf、GI0-503_REL 36.pdf、GI0-503_REL 41.pdf、GI0-503_REL 310.pdf,脚本选中GI0-503_REL 41.pdf而非GI0-503_REL 310.pdf

错误原因

  1. 字符串比较而非数值比较:原脚本直接用字符串类型的修订号和数值类型的$latestRevisionNo比较,PowerShell会自动将数值转为字符串按字符逐个对比,例如"4"的首字符"4"大于"25"的首字符"2",导致判断错误。
  2. 修订号提取不彻底:对于带前缀的修订号(如REL 210),原脚本提取的是包含前缀的完整字符串,无法直接用于正确的数值比较。

修复后的脚本

#----------------------------------------------------------------------#
param(
    [STRING]$path = $PSScriptRoot
)

# 设置源文件夹和目标文件夹
$srcFolder = $path
$destFolder = Join-Path -Path $srcFolder -ChildPath "Latest Drawings"

# 确保目标文件夹存在
if (-not (Test-Path -Path $destFolder)) {
    New-Item -Path $destFolder -ItemType Directory | Out-Null
}

# 获取所有符合格式的文件,并按图纸编号分组
$files = Get-ChildItem -Path $srcFolder -Filter "*_*.*" -File
$fileGroups = $files | Group-Object -Property { $_.Name.Split('_')[0] }

foreach ($group in $fileGroups) {
    $drawingNumber = $group.Name
    $latestRevisionFile = $null
    $highestRevision = 0

    foreach ($file in $group.Group) {
        # 提取修订号部分,并从中筛选出数字
        $revisionPart = $file.Name.Split('_')[1].Split('.')[0]
        # 提取字符串中的所有数字,转换为整数
        if ($revisionPart -match '\d+') {
            $revisionNumber = [int]$matches[0]
            # 比较数值大小
            if ($revisionNumber -gt $highestRevision) {
                $highestRevision = $revisionNumber
                $latestRevisionFile = $file
            }
        }
    }

    # 复制最新版本文件
    if ($latestRevisionFile) {
        Copy-Item -Path $latestRevisionFile.FullName -Destination $destFolder -Force
    }
}
#----------------------------------------------------------------------#

关键修改说明

  1. 按图纸编号分组处理:使用Group-Object直接按图纸编号分组,避免原脚本重复遍历所有文件的冗余操作,提升执行效率。
  2. 提取修订号中的纯数字:通过正则表达式\d+提取修订号部分中的数字,忽略前缀内容,确保仅对数字进行数值比较。
  3. 数值比较修订号:将提取的数字转为int类型,直接进行数值大小对比,彻底解决字符串比较的逻辑错误。
  4. 提前创建目标文件夹:将目标文件夹的创建逻辑移到循环外,避免每次循环重复检查路径,优化执行流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:47:38