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

如何在PowerShell脚本中维护会话信息 实现中断后从断点续跑

PowerShell 断点续跑实现方案

完整可运行代码

# 配置项
$sourceFile = "1.txt"
$progressFile = "progress.log"

# 读取待处理的所有行,需要忽略空行可加条件过滤 | Where-Object { $_ -ne '' }
$allLines = Get-Content $sourceFile
$totalLines = $allLines.Count

# 读取上次处理进度
$lastCompletedLine = -1
if (Test-Path $progressFile) {
    $readVal = Get-Content $progressFile -Raw
    if ([int]::TryParse($readVal, [ref]$lastCompletedLine)) {
        # 进度记录超过当前文件总行数时重置进度
        if ($lastCompletedLine -ge $totalLines - 1) {
            $lastCompletedLine = -1
            Remove-Item $progressFile -Force -ErrorAction SilentlyContinue
        }
    }
}

# 计算本次起始处理行号
$startLine = $lastCompletedLine + 1
if ($startLine -ge $totalLines) {
    Write-Host "所有内容已处理完成"
    exit 0
}

Write-Host "本次从第 $($startLine + 1) 行开始处理,共 $totalLines 行"

# 遍历处理
for ($i = $startLine; $i -lt $totalLines; $i++) {
    $currentVal = $allLines[$i]
    Write-Host "正在处理:$currentVal"

    try {
        # ---------------替换为你的业务逻辑开始---------------
        # 示例代码可删除
        Start-Sleep -Seconds 1
        # 模拟报错测试可打开下一行注释
        # if ($currentVal -eq "xyz") { throw "测试异常" }
        # ---------------替换为你的业务逻辑结束---------------
    }
    catch {
        Write-Host "处理 $currentVal 时出错:$_"
        # 需要出错后立即终止脚本可打开下一行注释
        # exit 1
    }

    # 单条处理完成后立即更新进度,写入磁盘避免丢失
    $i | Out-File $progressFile -Force -NoNewline
}

# 全部处理完成后清理进度文件,下次运行自动从头开始
Remove-Item $progressFile -Force -ErrorAction SilentlyContinue
Write-Host "所有内容处理完成"

实现逻辑说明

  • 核心是通过独立的progress.log文件记录已经处理完成的最后一行行号,每处理完一行就同步更新进度,无论脚本是异常报错、用户按Ctrl+C终止还是正常运行结束,已完成的进度都不会丢失
  • 处理中途中断时,当前正在处理的行还没更新到进度文件,下次重启会自动重新处理这行,完全符合从断点续跑的需求

注意事项

  • 建议业务逻辑保证幂等性,即同一行内容重复处理不会产生异常或者错误结果,避免极端场景下(进度写入前瞬间中断)重复处理导致问题
  • 如果1.txt内容会经常变更、行号不固定,可以把进度记录改为存储最后处理完成的内容值,需要保证1.txt中没有重复的待处理值即可

内容的提问来源于stack exchange,提问作者Pavan kumar D

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:39:03