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

PowerShell如何等待每个日志文件创建完成后再执行后续语句

解决方案

你这个问题需要做两层等待校验,避免API没执行完、日志没写完就进入下一轮循环,同时要修复原脚本里的笔误:

  • 原脚本第一行赋值的变量是$linesXmls,后续遍历用的是$lines,变量名不匹配会直接触发报错,先统一变量名
  • 给Start-Process加上-Wait参数,强制每一轮循环等调用的API进程执行退出后,再往下走
  • 增加日志文件可用性轮询:部分API在进程退出前会做最后写入操作,进程刚退出时日志可能还被占用,需要等文件完全释放、写入完成再进下一轮

修改后的完整脚本如下:

$lines = @(Get-Content -Path "$path") -Replace " "
ForEach($line in $lines) {
    $s = $line -split ","
    $var1s = $s[0]
    $var2s = $s[1]
    $targetLog = Join-Path "$path\folder" "$var2s.log"
    
    # 等待API进程执行完成
    Start-Process -FilePath $APIpath -ArgumentList "$argument1", "$argument2", "$argument3", $targetLog -Wait

    # 轮询确认日志文件写入完成、无进程占用
    $logCompleted = $false
    while (-not $logCompleted) {
        try {
            # 尝试以独占模式打开文件,打开成功说明没有进程在写入
            $fs = [System.IO.File]::Open($targetLog, 'Open', 'Read', 'None')
            $fs.Close()
            $logCompleted = $true
        }
        catch {
            # 文件不存在/被占用时等待500ms重试
            Start-Sleep -Milliseconds 500
        }
    }
}

轮询间隔默认设为500ms,如果你的单份日志体积大、API写入耗时长,可以适当调大这个等待值,减少无效的文件检测尝试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:54:18