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

求助:PowerShell实现按1万行拆分多SQL文件并添加指定文本

解决方案:PowerShell批量拆分SQL文件并添加事务头

需求明确

  • 批量处理输入文件夹下所有SQL文件(含子文件夹)
  • 按每10000行拆分单个SQL文件为多个独立小文件
  • 每个拆分后的文件开头自动添加BEGIN TRAN,结尾添加COMMIT TRAN和--ROLLBACK注释
  • 拆分结果保存到指定输出文件夹,不修改原文件

现有代码的核心问题

  • 逻辑矛盾:开头遍历文件但后续仅处理单个指定文件,未实现批量操作
  • 拆分方式错误:在原文件中插入事务语句,而非生成独立的拆分文件
  • 硬编码行数(5000行),无法灵活调整
  • 重复读取写入文件,效率低下
  • 无输出文件夹管理,存在覆盖原文件风险

优化后的PowerShell代码

# 可配置参数
$inputFolder = "C:\TEST"                # 输入SQL文件所在文件夹
$outputFolder = "C:\TEST\SplitOutput"   # 拆分文件输出文件夹
$linesPerFile = 10000                   # 每个拆分文件的业务行数(不含事务语句)

# 自动创建输出文件夹(不存在则生成)
if (-not (Test-Path -Path $outputFolder)) {
    New-Item -ItemType Directory -Path $outputFolder | Out-Null
}

# 遍历所有SQL文件并处理
Get-ChildItem -Path $inputFolder -Filter "*.sql" -Recurse | ForEach-Object {
    $originalFile = $_
    $baseName = $originalFile.BaseName
    $extension = $originalFile.Extension
    $content = Get-Content -Path $originalFile.FullName
    $totalLines = $content.Count
    $fileCounter = 1

    # 按设定行数拆分文件
    for ($startLine = 0; $startLine -lt $totalLines; $startLine += $linesPerFile) {
        # 截取当前批次的业务行
        $endLine = [Math]::Min($startLine + $linesPerFile - 1, $totalLines - 1)
        $currentBatch = $content[$startLine..$endLine]

        # 构造拆分文件的完整内容
        $finalContent = @(
            "BEGIN TRAN"
            $currentBatch
            ""
            "COMMIT TRAN"
            "--ROLLBACK"
        )

        # 生成带序号的输出文件名(如:test_001.sql)
        $outputFileName = "{0}_{1:D3}{2}" -f $baseName, $fileCounter, $extension
        $outputPath = Join-Path -Path $outputFolder -ChildPath $outputFileName

        # 写入文件(UTF-8编码避免乱码)
        $finalContent | Set-Content -Path $outputPath -Encoding utf8

        $fileCounter++
    }

    Write-Host "完成拆分:$($originalFile.FullName) → 生成$($fileCounter-1)个文件"
}

Write-Host "所有SQL文件拆分完毕!"

代码关键说明

  • 参数化配置:核心参数集中在顶部,可快速调整路径、拆分行数
  • 安全处理:拆分结果全部输出到指定文件夹,原文件完全保留
  • 高效IO:单次读取原文件内容,批量截取写入,减少磁盘操作
  • 规范命名:拆分文件以原文件名+三位序号命名,便于排序和识别
  • 编码兼容:使用UTF-8编码写入,避免不同环境下的乱码问题

使用注意事项

  1. 先做测试:用少量文件验证拆分结果符合预期后再批量处理
  2. 权限检查:确保PowerShell对输入文件夹有读取权限、对输出文件夹有写入权限
  3. 行数调整:根据实际需求修改$linesPerFile的值即可更改拆分粒度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:41:48