我有一百个具有以下结构的文本文件:
file1.txt
Class Categeory_1 {
(content 1, may contain many other block ending with }; )
};
file2.txt
Class Categeory_2 {
(content 2, may contain many other block ending with }; )
};
我想合并所有文件而没有每个文件的第一行和最后一行,所以output.txt应该是:
(content 1, may contain many other block ending with }; )
(content 2, may contain many other block ending with }; )
...
文件名是随机的,类名也是随机的,但以"类别_"
开头我知道如何将所有文件合并在一起:
@echo off
for /r %%i in (*.txt) do (
if not %%~nxi == output.txt (
copy /A output.txt+"%%i" && echo. >> output.txt
)
)
但不确定如何跳过每个文件的第一行和最后一行。能否请你提供帮助,谢谢。
答案 0 :(得分:0)
这是一个有效的代码示例
@echo off
setlocal enabledelayedexpansion
if exist output.txt del output.txt
set "var="
for /r %%i in (*.txt) do (
if "%%~nxi" NEQ "output.txt" (
set "var="
for /f "usebackq skip=1 delims=" %%b in ("%%~i") do (
if "!var!" NEQ "" Echo !var!
set var=%%b
))) >> output.txt
以下是它的作用的快速摘要:
Setlocal
允许在for-loop output
并重置var
变量For
每个文本文件,都不是output.txt
var
的值重置为空For
此文本文件中的每一行,跳过第一行:var
不为空,则echo
为其值Set
var
对当前line
>>
将所有echo
重定向到output.txt
注意,最后两步的顺序是允许你跳过最后一行的顺序,因为你总是回显上一行。
这意味着如果文件只有2行,则不会回显任何内容,
如果它有3行,它只会回显中间的一行,
如果它有4条线,它将回显中间的两条,等等。