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

求助:批量合并TXT文件时跳过每个文件的首尾行

解决方案:批量合并TXT文件并跳过首尾行

我明白你的需求:要把上百个结构相似的TXT文件合并到output.txt,但每个文件都要跳过开头的Class Category_xxx {和结尾的};,只保留中间内容。原来的copy命令没法处理行过滤,咱们换个思路来实现。

方法一:纯批处理方案(兼容旧版Windows)

这个方案用原生CMD命令实现,不需要额外工具:

@echo off
setlocal enabledelayedexpansion

:: 先删除旧的output.txt(如果存在)
del output.txt 2>nul

:: 遍历所有TXT文件,跳过output.txt本身
for /r %%i in (*.txt) do (
    if not "%%~nxi"=="output.txt" (
        set "skip_first_line=1"
        set "previous_line="
        
        :: 逐行读取当前文件
        for /f "usebackq delims=" %%a in ("%%i") do (
            if !skip_first_line! equ 1 (
                :: 跳过第一行
                set "skip_first_line=0"
            ) else (
                :: 先输出上一行,最后一行会被留在previous_line里不输出
                if defined previous_line (
                    echo !previous_line!>>output.txt
                )
                set "previous_line=%%a"
            )
        )
    )
)

echo 合并完成!
pause

代码逻辑说明:

  1. 延迟扩展:启用enabledelayedexpansion是为了在循环里实时更新变量值。
  2. 跳过第一行:用skip_first_line标记,读到第一行时直接跳过,之后关闭标记。
  3. 跳过最后一行:通过缓存上一行的方式,每次输出的是前一行内容,当循环结束时,最后一行会留在previous_line中,不会被写入文件。

方法二:PowerShell方案(更简洁高效)

如果你的系统是Win7及以上,PowerShell会是更简洁的选择,处理特殊字符也更稳定:

# 递归查找所有TXT文件,排除output.txt
Get-ChildItem -Recurse -Filter *.txt | Where-Object { $_.Name -ne "output.txt" } | ForEach-Object {
    # 读取文件内容,取第二行到倒数第二行(数组索引从0开始)
    $content = Get-Content $_.FullName
    $content[1..($content.Count - 2)] | Add-Content output.txt
}

代码逻辑说明:

  1. Get-ChildItem递归获取所有TXT文件,Where-Object排除目标文件output.txt。
  2. Get-Content读取文件内容为数组,通过索引1..($content.Count-2)直接截取需要的行(跳过第0行即第一行,跳过最后一行即索引$content.Count-1)。
  3. Add-Content将截取的内容追加到output.txt。

注意事项

  • 如果你的TXT文件包含特殊字符(比如!),批处理方案可能会出现内容丢失,这时候优先选择PowerShell方案。
  • 运行批处理时,建议在目标文件夹的空白处按住Shift右键,选择“在此处打开命令窗口/Windows终端”,再执行脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:47:06