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

PowerShell文件分割脚本末尾出现两行空行的问题求助

PowerShell文本分割脚本:消除末尾额外空行

问题原因

你的脚本出现末尾额外两行空行,主要是三个原因:

  • 换行符处理混乱:用-split "n"分割Windows格式文件时,每行末尾会残留\r,后续拼接又加\n`,导致换行符重复。
  • Set-Content默认加换行:这个cmdlet会自动在写入内容末尾追加一个换行,加上你拼接时多出来的换行,就凑成了两行空行。
  • 拼接逻辑冗余:每次添加行都直接加\n,最后用Trim("n")`只能去掉部分换行,没处理干净。

修复后的脚本

# 分割文本函数:每个文件块最多10万字符,完整保留整行
function DivideText($text) {
    $maxCharacters = 100000
    $parts = @()
    # 用StringBuilder提升拼接性能,同时精准控制内容
    $currentPart = [System.Text.StringBuilder]::new()
    # 兼容Windows(\r\n)和Unix(\n)换行格式
    $lines = $text -split '\r?\n'

    foreach ($line in $lines) {
        # 计算加入当前行后的总长度(含换行符)
        $requiredLength = $currentPart.Length + $line.Length + 2
        if ($requiredLength -le $maxCharacters) {
            # 当前部分非空时才加换行,避免开头空行
            if ($currentPart.Length -gt 0) {
                [void]$currentPart.Append("`r`n")
            }
            [void]$currentPart.Append($line)
        }
        elseif ($currentPart.Length -eq 0) {
            # 单行长度超限制,直接作为单独块
            $parts += $line
        }
        else {
            # 保存当前块,重置为当前行
            $parts += $currentPart.ToString()
            $currentPart = [System.Text.StringBuilder]::new($line)
        }
    }

    # 添加最后一个非空块
    if ($currentPart.Length -gt 0) {
        $parts += $currentPart.ToString()
    }

    return $parts
}

# 获取所有txt文件
$files = Get-ChildItem -Path . -File -Recurse -Filter *.txt

foreach ($file in $files) {
    $content = Get-Content $file.FullName -Raw
    $parts = DivideText $content

    $originalNameWithoutExtension = $file.FullName -replace [regex]::Escape($file.Extension), ""
    $i = 1

    foreach ($part in $parts) {
        $partNumber = "{0:D2}" -f $i
        $partFileName = "{0}Parte{1}.txt" -f $originalNameWithoutExtension, $partNumber
        # 用-NoNewline阻止自动添加末尾换行
        Set-Content -Path $partFileName -Value $part -NoNewline -Encoding Default
        $i++
    }

    Remove-Item $file.FullName -ErrorAction SilentlyContinue
}

Write-Host "文件分割完成。"

核心修改说明

  • StringBuilder替代字符串拼接:不仅性能更好,还能精确控制每个块的内容长度,避免冗余换行。
  • 兼容多平台换行:用-split '\r?\n'自动识别Windows和Unix换行,不会残留多余的\r字符。
  • 精准添加换行:只在块内已有内容时才加换行,从根源避免开头或结尾出现不必要的空行。
  • Set-Content加-NoNewline:彻底阻止PowerShell在文件末尾额外添加换行,只保留原内容的换行格式。
  • 正则转义扩展名:处理扩展名中的特殊字符(比如带点的扩展名),避免替换出错。

这样修改后,分割后的文件会完全保留原文件的空行,不会出现额外的两行空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:27:37