复制文本文件中的最后一段

时间:2015-12-14 21:12:10

标签: batch-file text

我有兴趣编写一个批处理脚本,该脚本将复制包含许多其他文本块的.txt文件中的最后一个文本块。可以考虑执行脚本的日志文件,但没有任何一致的内容或长度。每个条目都用空行分隔。

因此,对于以下文档,我只想选择并复制最后一段:

  

Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。

     

Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。

     

Duis aute irure dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。

文本本身的长度可能不同。我需要的唯一可靠指标是,它将是文档中最后一行后面的所有内容 - 在这种情况下,所有内容都遵循" Duis aute ......"

我认为脚本的大纲将会是这样的,但我对批处理并不熟悉。非常感谢您提供的任何帮助!

SET FOO
FOR /F "delims=" %%G IN (somefile.txt) DO
(IF "%%G"=="" (SET FOO="" )
ELSE (SET FOO==%%G + %FOO%))
ECHO %FOO%>whatever.txt

2 个答案:

答案 0 :(得分:2)

@echo off
setlocal

rem Get the line number of the last empty line
for /F "delims=:" %%a in ('findstr /N "^$" somefile.txt') do set "skip=skip=%%a"

rem Show all lines after it
for /F "%skip% delims=" %%a in (somefile.txt) do echo %%a

答案 1 :(得分:0)

你可以这样做:

@echo off
setlocal EnableDelayedExpansion
SET "FOO="
type "file.txt" > "file.txt.tmp"
for /f "tokens=1* delims=:" %%A in ('findstr /n "^" "file.txt.tmp"') do if [%%B]==[] (SET "FOO=") else (SET "FOO=!FOO!%%B")
del "file.txt.tmp"
>filepara.txt echo %FOO%

这只有一个缺点,它不会将原始段落中的换行符回显到文本文件。

编辑:

通过创建包含换行符的变量,我找到了一种保留换行符的方法:

@echo off
setlocal EnableDelayedExpansion
set LF=^


SET "FOO="
type "file.txt" > "file.txt.tmp"
for /f "tokens=1* delims=:" eol=¬ %%A in ('findstr /n "^" "file.txt.tmp"') do if [%%B]==[] (SET "FOO=") else (SET "FOO=!FOO!%%B!LF!")
del "file.txt.tmp"
>temp.txt echo !FOO!
more temp.txt > paragraph.txt
del temp.txt

注意:设置LF后需要两个空行才能生效!