如何在PowerShell脚本1生成CSV批文件后自动调用脚本2并间隔执行?
批量CSV生成后自动处理并间隔等待的实现方案
现有脚本背景
脚本1:拆分生成批量CSV
用于将大型Master.csv拆分为每50条数据一个的小批量CSV:
$BatchNr = 1 Import-Csv -Path .\Master.csv | Create-Batch -Size 50 | ForEach-Object { $_ | ForEach-Object { $_ # 可在此对批内单条数据做预处理 } | Export-Csv ".\Batch$BatchNr.csv" $BatchNr++ }
生成文件命名为Batch1.CSV、Batch2.CSV等。
脚本2:处理单个批量CSV
示例处理代码:
$Users = Import-Csv -Path "Batch1.CSV" # 此处为具体的业务处理逻辑
需求目标
实现生成一个批文件后立即调用脚本2处理,处理完成后间隔15分钟再处理下一个批文件,替代手动操作。
具体实现步骤
1. 修改脚本2,支持动态接收文件路径参数
让脚本2可以处理任意传入的批文件,而非固定指向Batch1.CSV:
param( [Parameter(Mandatory=$true)] [string]$FilePath ) # 读取目标批文件 $Users = Import-Csv -Path $FilePath # 执行你的业务处理逻辑 Write-Host "已开始处理文件: $FilePath" # ... 此处添加原有处理代码
2. 修改脚本1,集成调用与等待逻辑
在脚本1中,每生成一个批文件后立即调用脚本2,处理完成后等待15分钟再继续下一批:
$BatchNr = 1 $batchFiles = @() Import-Csv -Path .\Master.csv | Create-Batch -Size 50 | ForEach-Object { $currentBatchPath = ".\Batch$BatchNr.csv" # 导出当前批CSV $_ | ForEach-Object { $_ # 保留原有批内数据处理逻辑 } | Export-Csv -Path $currentBatchPath -NoTypeInformation $batchFiles += $currentBatchPath # 调用脚本2处理当前批文件 & .\脚本2.ps1 -FilePath $currentBatchPath # 非最后一批则等待15分钟 if ($BatchNr -lt $batchFiles.Count) { Write-Host "处理完成,等待15分钟后开始下一批..." Start-Sleep -Seconds 900 # 15*60=900秒 } $BatchNr++ }
关键细节说明
- 使用
&操作符调用脚本2,并通过-FilePath参数传递当前批文件路径 Start-Sleep -Seconds 900精确实现15分钟的等待时长- 加入最后一批跳过等待的判断,避免处理完所有文件后无意义的等待
- 脚本2通过
param块强制要求传入文件路径,确保调用时不会出错
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

