找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24215|回复: 13

[文本处理] 文本每行开头结尾添加 数据很多 几百万??快速?bat?

[复制链接]
发表于 2023-8-26 23:14:42 | 显示全部楼层 |阅读模式
文本每行开头结尾添加  数据很多 几百万??快速?bat?
发表于 2023-8-27 01:53:49 | 显示全部楼层
不知,下面,代码,行否?

  1. @echo off
  2. set distart=每行开头添加的内容
  3. set diend=每行结尾添加的内容
  4. set "difile=文件名或文件路径"
  5. rem 执行后输出生成的文件名为aaaaaa.aaaaaa

  6. (for /f "delims=" %%a in ('findstr /n .* %difile%') do (
  7.     set "str=%%a"
  8. set "a=%distart%"
  9. set "b=%diend%"
  10.     setlocal enabledelayedexpansion
  11.     echo,!a!!str:*:=!!b!
  12.     endlocal
  13. ))>aaaaaa.aaaaaa

  14. pause&exit/b
复制代码
发表于 2023-8-27 01:56:06 | 显示全部楼层
啊,添加的内容和文件改成自己需要的,最好都都都不要有特殊字符
发表于 2023-8-27 02:29:28 | 显示全部楼层
本帖最后由 77七 于 2023-8-27 03:15 编辑

回复 2# Five66


   
不保留空行使用批处理还行。使用for /f (findstr)很慢。
发表于 2023-8-27 03:20:43 | 显示全部楼层
使用临时文件,应该快点。
  1. @echo off
  2. rem str1 str2 如果不含特殊符号,直接修改就行
  3. findstr /n .* 1.txt > $
  4. (for /f "useback tokens=1* delims=:" %%a in ("$") do (
  5.         if "%%b" neq "" (
  6.                 echo str1%%bstr2
  7.         ) else (
  8.                 echo=
  9.         )
  10. ))>2.txt
  11. del $
  12. pause
复制代码
 楼主| 发表于 2023-8-27 07:50:09 | 显示全部楼层
使用临时文件,应该快点。
77七 发表于 2023-8-27 03:20



  有没有更快的方式?这个有也是慢?
 楼主| 发表于 2023-8-27 07:50:28 | 显示全部楼层
不知,下面,代码,行否?
Five66 发表于 2023-8-27 01:53



      有没有更快的方式?这个有也是慢?
发表于 2023-8-27 09:07:00 | 显示全部楼层
快和慢都是相对的,你可以给一个量化的指标,比如一百万行几秒内
发表于 2023-8-27 09:29:31 | 显示全部楼层
  1. gawk "{print(NF?"开头添加"$0"结尾添加":"")}" 1.txt > 2.txt
复制代码
发表于 2023-8-27 16:12:44 | 显示全部楼层
这样应该快很多吧

  1. @if (0)//==(0)// echo off&pause&cscript //nologo -e:jscript "%~f0"&pause&exit
  2. @end

  3. //修改下面英文双引号里面的内容为自己需要的
  4. var distart="每行开头添加的内容";
  5. var diend="每行结尾添加的内容";
  6. var difile="文件名或文件路径";//路径使用双反斜杠\\

  7. var dienc="gb2312";//文件编码
  8. var diotf="输出的文件名或路径";//路径使用双反斜杠\\

  9. //=========================
  10. var inf=new ActiveXObject('adodb.stream');
  11. var otf=new ActiveXObject('adodb.stream');
  12. inf.Type=2;inf.Charset=dienc;inf.Open();
  13. inf.LoadFromFile(difile);inf.Position=0;
  14. otf.Type=2;otf.Charset=dienc;otf.Open();
  15. while(!inf.EOS)
  16. {
  17. otf.WriteText(distart);
  18. otf.WriteText(inf.ReadText(-2),0);
  19. otf.WriteText(diend+"\r\n");
  20. }
  21. otf.SaveToFile(diotf,2);
  22. inf.Close();otf.Close();
复制代码
发表于 2023-8-27 16:15:53 | 显示全部楼层
要速度快还是推荐第三方程序,比如9楼的gawk
 楼主| 发表于 2023-8-27 16:35:31 | 显示全部楼层
回复 9# buyiyang


    谢谢   这个好
发表于 2023-8-28 10:10:39 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-8-28 15:28 编辑

按照4楼所说,如果每行前后分别添加a、b,忽略空行输出,不考虑第三方,若使用纯P,最简单也是最快的方法:
  1. @echo off
  2. (for /f "delims=" %%i in (a.txt) do echo,a%%ib)>b.txt
  3. pause
复制代码
发表于 2023-8-28 22:28:31 | 显示全部楼层
回复 1# idc878787


推荐使用第三方命令行工具 sed.exe
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. sed "s/^/开头添加/;s/$/结尾添加/" 1.txt > 2.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:17 , Processed in 0.020277 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表