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

[文本处理] 【已解决】批处理如何从文件第4行开始在每行末尾添加行号?

[复制链接]
发表于 2025-8-20 23:47:30 | 显示全部楼层 |阅读模式
本帖最后由 chishingchan 于 2025-8-21 12:37 编辑

例如:a.txt 的内容如下:
  1. AA
  2. BB
  3. CC
  4. ab
  5. ba
  6. cd
  7. dc
  8. eee
  9. ffffff
  10. .
  11. .
  12. .
  13. 此处省略了 nnn 行
复制代码
从第 4 行开始,在每行的行尾添加行号,最终 b.txt 的内容如下:
  1. AA
  2. BB
  3. CC
  4. ab1
  5. ba2
  6. cd3
  7. dc4
  8. eee5
  9. ffffff6
  10. .
  11. .
  12. .
复制代码
求批处理,谢谢!

已解决。容易理解的整理如下:
  1. @echo off
  2. cd /d %~dp0
  3. type nul>b.txt
  4. for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" a.txt') do (
  5.         if %%a lss  4 (
  6.                 echo:
  7.         ) else (
  8.                 for /f %%n in ('set/a %%a-3') do echo.%%b%%n>>b.txt

  9.         )
  10. )
复制代码
发表于 2025-8-21 01:26:57 | 显示全部楼层
  1. @echo off
  2. cd /d "%~dp0"
  3. @REM 起始行数
  4. set begin=4

  5. set /a n=1-begin
  6. (
  7. for /f "delims=" %%A in (1.txt) do (
  8.   set /a "n+=1"
  9.   setlocal enableDelayedExpansion
  10.   for %%B in (!n!) do (
  11.     endlocal
  12.     if %%B lss 1 (
  13.       echo %%A
  14.     ) else (
  15.       echo %%A%%B
  16.     )
  17.   )
  18. )
  19. )>2.txt

  20. pause
  21. exit /b
复制代码

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 值得参考。谢谢!

查看全部评分

发表于 2025-8-21 01:53:29 | 显示全部楼层
本帖最后由 Five66 于 2025-8-21 03:25 编辑

文件 ,行数 ,编码可自行设置(3-5行)
运行后会添加前缀@@new_创建新文件

  1. @set @do_not_save_as_utf8=1;/*&echo off

  2. set file=a.txt
  3. set line_add=4
  4. set encoding=gbk

  5. cscript //nologo //e:jscript "%~f0" "%file%" "%line_add%" "%encoding%"
  6. echo,&echo done&pause&exit /b 0 */

  7. (function(argv,stdin,stdout,stderr,wscript,nil,not_nil){if(!argv.length)return;

  8. var p=argv(0).split(/\\|\//);
  9. var file_in=file_new(argv(0),'r',argv(2));
  10. var file_out=file_new(nil,'w',argv(2));

  11. if(!file_in){
  12. wscript.echo('open file '+argv(0)+' error');
  13. file_out.close();
  14. wscript.quit();
  15. }


  16. var str=file_in.readtext(8192);
  17. file_in.position=0;
  18. var l=str.match(/\r\n?|\n/);
  19. if(l){
  20. if('\n'==l[0])file_in.lineseparator=10;
  21. if('\r'==l[0])file_in.lineseparator=13;
  22. if('\r\n'==l[0])file_in.lineseparator=-1;
  23. }else{file_in.lineseparator=-1;}
  24. file_out.lineseparator=file_in.lineseparator;

  25. var i=0,line_add=argv(1)>0?argv(1)-1:0;
  26. while(!file_in.eos){
  27. str=file_in.readtext(-2);
  28. if(line_add){
  29. line_add--;
  30. file_out.writetext(str,1);
  31. }else{
  32. i++;
  33. file_out.writetext(str+i,1);
  34. }}

  35. file_out.savetofile('@@new_'+p.pop(),2);
  36. file_in.close();
  37. file_out.close();

  38. function file_new(n,m,e){var t=2,r=GetObject('new:adodb.stream');try{if(e)r.charset=e;
  39. if(-1!=m.indexOf('b'))t=1;r.type=t;r.open();if(n&&''!=n)r.loadfromfile(n);}catch(l){r=nil}
  40. return r;}
  41. })(WScript.Arguments,WScript.StdIn,WScript.StdOut,WScript.StdErr,WScript,null);
复制代码

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 冗长不易理解,但也谢谢!

查看全部评分

发表于 2025-8-21 08:04:38 | 显示全部楼层
回复 1# chishingchan

  1. @echo off &(for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" a.txt') do if %%a lss  4 (echo.%%b) else for /f %%n in ('set/a %%a-3') do echo.%%b%%n)>b.txt
  2. pause&exit/b
复制代码

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 简短精干,采纳。谢谢!

查看全部评分

发表于 2025-8-21 09:16:39 | 显示全部楼层
回复 1# chishingchan

用gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )的实现方式如下:

  1. gawk "NR>3{A=NR-3;$0=$0 A}1" 1.txt>2.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
chishingchan + 1 尽量不使用第三方程序,但也谢谢!

查看全部评分

发表于 2025-8-26 11:51:59 | 显示全部楼层

在不用外部脚本也不开启变量延迟的前提下,再给一个可明显提升效率的版本如下,其动因可参考 http://www.bathome.net/viewthrea ... mp;extra=#pid290105 14楼说明..

  1. @echo off &(for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" a.txt') do if %%a lss  4 (echo,%%b) else set/a "v=%%a-3" &call echo,%%b%%v%%)>b.txt
  2. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:06 , Processed in 0.033192 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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