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

PowerShell如何基于CSV文件行数实现PDF文件按规则重命名

修复方案

错误原因

  • Expand-Archive 路径错误:你使用相对路径*.zip指定压缩包,但脚本运行的工作目录不是压缩包所在的D:\WORK\JetLetter\JWH\JWH_Tr_Hot\目录,导致找不到压缩包。你已经通过Get-ChildItem拿到了最新的压缩包对象$source,直接使用它的全路径属性即可。
  • 多余的csn重命名逻辑:原压缩包内的文件是CSV格式,不存在.csn后缀的文件,这行代码属于多余逻辑,直接删除即可。
  • 文件名拼接缺分隔符:原代码在生成行数范围时缺少短横线-,会导致输出的文件名格式为xxx_18750.pdf,不符合预期的xxx_1-8750.pdf格式。
  • 边界条件缺失:原逻辑只判断了小于、大于的情况,未处理等于5000、等于10000的边界场景,会出现逻辑漏判。

修复后完整代码

# 配置基础路径,避免重复写路径
$basePath = "D:\WORK\JetLetter\JWH\JWH_Tr_Hot\"

If (Test-Path "$basePath\*.zip") {
    # 获取最新的zip压缩包
    $source = Get-ChildItem "$basePath\*.zip" | Select-Object -Last 1
    # 直接用获取到的压缩包对象解压,避免路径错误
    Expand-Archive -Path $source.FullName -DestinationPath $basePath -Force
    # 自动匹配目录下的*_Mailer.csv文件,无需写死文件名
    $csvFile = Get-ChildItem -Path $basePath -Filter "*_Mailer.csv" | Select-Object -First 1
    # 统计CSV行数
    $lineCount = (Import-Csv $csvFile.FullName | Measure-Object).Count
    # 生成JobID
    $JobID = "JWH_" + $source.BaseName.Split('_')[0]
    Write-Output $source.Name
    Write-Output $JobID

    # 处理第一个PDF
    If (Test-Path "JWHPrintOutput_0001.pdf") {
        $endNum = [Math]::Min($lineCount, 5000)
        Rename-Item "JWHPrintOutput_0001.pdf" "$($JobID)_Pr01_1-$endNum.pdf"
    }

    # 处理第二个PDF
    If (Test-Path "JWHPrintOutput_0002.pdf") {
        $startNum = 5001
        $endNum = [Math]::Min($lineCount, 10000)
        Rename-Item "JWHPrintOutput_0002.pdf" "$($JobID)_Pr02_$startNum-$endNum.pdf"
    }
}

优化说明

  • 用[Math]::Min简化了行数判断逻辑,不需要多分支if判断,自动取阈值和实际行数的较小值作为结束编号,完全匹配你8750行时第二个PDF后缀为5001-8750的需求
  • 新增-Force参数到Expand-Archive,避免重复解压时报文件已存在的错误
  • 自动查找目录下的*_Mailer.csv文件,不需要写死文件名,适配不同前缀的CSV文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:06:02