用批处理如何提取指定行的内容到新的文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用批处理如何提取指定行的内容到新的文本相关的知识,希望对你有一定的参考价值。

例如如下文件我要取第三行和第十行的所有字符到新的文件并显示如下176L0872619160S426=1
[HeaderBegin]
ABC23
176L0872619160S426
176L0840

5200
0
10-18-2016 13:30:43
91.76682857168
1
0

0

参考技术A @echo off&cd/d "%~dp0"setlocal enabledelayedexpansionset "t1=2014/10"set "t2=2014/12/15"set "f= "set "$0=文件名%f%日期 时间%f%名称"(for /f "tokens=1,2* delims==:" %%a in ('findstr "Date=20[0-9][0-9].[0-1][0-9].[0-3][0-9]" *.txt')do ( if "%%c" geq "%t1%" if "%%c" leq "%t2%99" ( set/a n+=1 >con echo %%a for /f "tokens=1* delims=:" %%d in ('findstr/n . "%%a"')do ( if %%d equ 1 for /f "tokens=2,3 delims=%f%" %%f in ("%%e")do ( if !n! equ 1 set "fd=%%f.xls" set "s=%%c%f%%%~na%f%%%g") if %%d equ 12 for /f "tokens=1* delims==" %%f in ("%%e")do ( if !n! equ 1 set "$=%$0%%f%%%f" set "s=!s!%f%%%g") if !n! equ 1 if %%d equ 19 set "$=!$!%f%%%e" if %%d equ 20 for /f "tokens=*" %%f in ("%%e")do set "s=!s!%f%%%f" if !n! equ 1 if %%d equ 31 for /f "tokens=5* delims=%f%" %%f in ( "%%e")do set "$=!$!%f%%%g" if %%d geq 32 for /f "tokens=5* delims=%f%" %%f in ("%%e")do ( set/a m=0 if not "%%g"=="" for %%h in (%%g)do set/a "m+=1,#!m!+=%%h")) for /l %%d in (1,1,!m!)do set "s=!s!%f%!#%%d!" echo;!S!)))>temp.txt(echo;!$!for /f "tokens=1,2* delims=%f%" %%i in ('type temp.txt^|sort')do ( echo %%j%f%%%i%f%%%k))>"%fd%"del temp.txtecho %n% 个文件统计完毕!pause本代码将搜索批处理文件所在文件夹中所有含日期格式的txt文件,输出也是纯文本但会用 Excel 打开
第3、4行指定日期时间起止范围,必须与统计源文中格式一致,但可省去较小时间单位数据(如代码所示例)表示取整月整日的情况,引号范围内不能有多余空格
第5行等号后引号前的空是个制表符,复制代码后注意用Tab键重新按一下
,当然要求源文中的列分隔也必须是制表符,且各统计文件中涉及获取数据部分各列不能有空数据,需要统计累加部分的数据必须是整数
各文件中如示例的N行后不能再有数据否则会出错

bat在txt文本指定行的头尾插入内容?

批量处理100个txt文本,再文本的第32行的头尾增加内容
比如修改前文本第32行:
这里是第32内容

修改后
111这里是第32内容222

复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起运行

<# :
cls&echo off&cd /d "%~dp0"
rem 在一个txt文件的第几行/某一行/指定行的开头和末尾添加/插入内容
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$file="xxx.txt";
$findline=32;
$prefix="111";
$suffix="222";
if(-not (test-path -liter $file))write-host ('"'+$file+'" 未找到');exit;;
$enc=[Text.Encoding]::GetEncoding('GB2312');
$text=[IO.File]::ReadAllLines($file, $enc);
for($i=0;$i -lt $text.count;$i++)
    if(($i+1) -eq $findline)$text[$i]=$prefix+$text[$i]+$suffix;

[IO.File]::WriteAllLines($file, $text, $enc);

追问

运行可以,能帮我改成直接修改当下文本并保存,不要重新创建新的resule文件夹吗

追答

按运行后窗口中的提示联系我

参考技术A 这么复杂的操作还是用Powershell脚本吧。BAT处理起来挺费劲。追问

没事量没那么大,可以话帮我写段bat代码

参考技术B BAT处理起来麻烦

以上是关于用批处理如何提取指定行的内容到新的文本的主要内容,如果未能解决你的问题,请参考以下文章

使用批处理脚本读取文本文件并以不同的顺序将特定文本复制到新的文本文件中[关闭]

Linux环境下文本处理,提取需要的内容?

Linux怎么查看文本中指定行的内容

bat 批处理 多行多列文本如何拿到指定行的第几列数据?

批处理命令get_line获取文本总行数并显示指定行的内容

fortran如何读入文本文件中的某行的指定部分