Board logo

标题: [文本处理] 批处理如何实现给文本内容添加行号? [打印本页]

作者: wh1234567    时间: 2014-7-20 18:13     标题: 批处理如何实现给文本内容添加行号?

文本内容比较多,但每行内容的前面没有序号,想用批处理自动给文本内容每行前面加个行号,请问如何写呢?
例如文本内容如下:
11.txt
需v师德师风
bdbdfbd-dfvd=dfd
231231323223123123232312323[fff]
sddfsfsfsd3231方便更方便
自动处理后格式为:
1-bdbdfbd-dfvd=dfd
2-231231323223123123232312323[fff]
3-sddfsfsfsd3231方便更方便
并输出到另外一个文本22.txt里
作者: jingyu9575    时间: 2014-7-20 19:36

  1. @echo off
  2. set i=1
  3. >22.txt (for /f "delims=" %%s in (11.txt) do (
  4. setlocal enabledelayedexpansion
  5. <nul set /p "_=!i!"
  6. setlocal disabledelayedexpansion
  7. <nul set /p "_=-%%s"
  8. echo,
  9. set /a i+=1
  10. ))
复制代码
如果分隔符用冒号就简单了:
  1. findstr /N ".*" 11.txt > 22.txt
复制代码

作者: DAIC    时间: 2014-7-20 20:07

  1. sed = 11.txt | sed "N;s/\n/-/" > 22.txt
复制代码

作者: DAIC    时间: 2014-7-20 20:09

  1. gawk "{print NR\"-\"$0}" 11.txt > 22.txt
复制代码

作者: DAIC    时间: 2014-7-20 21:34

  1. powershell -c "foreach ($i in $(gc 11.txt)) {$n++; \"$n-\" + $i}" > 22.txt
复制代码

作者: wh1234567    时间: 2014-7-20 22:37

回复 2# jingyu9575


   为什么会出现!i!这种情况,不能全部正常处理
作者: wh1234567    时间: 2014-7-20 22:40

不想使用第三方程序,希望大虾们帮助下吧,
作者: wh1234567    时间: 2014-7-20 22:44

每行前面添加行号和固定字符(例如-或.或空格)
作者: CrLf    时间: 2014-7-21 00:07

  1. hash /printf:"%d-%s",number,string /file 11.txt >22.txt
复制代码

作者: CrLf    时间: 2014-7-21 00:08

  1. @echo off
  2. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* 11.txt') do echo %%a-%%b)>22.txt
复制代码

作者: CrLf    时间: 2014-7-21 00:19

本帖最后由 CrLf 于 2014-7-21 00:22 编辑
  1. @echo off
  2. for /f %%a in ('find /c /v "" ^<11.txt') do set count=%%a
  3. (for /l %%a in (1 1 %count%) do (
  4.   setlocal enabledelayedexpansion
  5.   set /p "str="&echo;%%a-!str!
  6.   endlocal
  7. ))<11.txt >22.txt
复制代码

作者: wh1234567    时间: 2014-7-21 00:21

本帖最后由 wh1234567 于 2014-7-21 00:29 编辑

回复 10# CrLf


    哦,这个正常,感谢您了
作者: CrLf    时间: 2014-7-21 00:22

  1. @echo off
  2. ((for /f "delims=" %%a in ('findstr /n .* 11.txt') do (
  3.    set "str=%%a"
  4.    set /a n+=1
  5.    setlocal enabledelayedexpansion
  6.    set "str=!str:*:=!"
  7.    echo !n!-!str!
  8.    endlocal
  9. ))>22.txt
复制代码

作者: wh1234567    时间: 2014-7-21 00:23

本帖最后由 wh1234567 于 2014-7-21 00:28 编辑

回复 11# CrLf


    这个不行,输不出
作者: CrLf    时间: 2014-7-21 00:44

  1. @set @a=0;/*&echo off
  2. findstr /n .* 11.txt |cscript /nologo /e:jscript %0 >22.txt
  3. pause&exit
  4. */
  5. str = WScript.StdIn.ReadAll()
  6. str = str.replace(/^(\d+):/gm,'$1-')
  7. WScript.Echo(str)
复制代码

作者: CrLf    时间: 2014-7-21 00:46

  1. @set @a=0;/*&echo off
  2. cscript /nologo /e:jscript %0 <11.txt >22.txt
  3. pause&exit
  4. */
  5. str = WScript.StdIn.ReadAll()
  6. str = str.replace(/\r?\n/g,'");WScript.Echo(++i + "-')
  7. str = 'WScript.Echo((i=1)+"-'+str+'")'
  8. eval(str)
复制代码

作者: CrLf    时间: 2014-7-21 00:47

回复 14# wh1234567


    我这测试没问题
作者: DAIC    时间: 2014-7-21 08:20

回复 7# wh1234567


    XP还是Win7?
作者: wh1234567    时间: 2014-7-21 08:42

回复 18# DAIC


     是XP的
作者: terse    时间: 2014-7-21 11:25

编码问题吗 但也不对
如是编码问题的话 10楼代码也不能处理
下面能正确显示不
  1. @echo off
  2. for /f "tokens=1*delims=[]" %%i in ('find /v /n "" ^<11.txt')do echo,%%i-%%j
  3. pause
复制代码

作者: wh1234567    时间: 2014-7-21 20:48

回复 20# terse

不行
作者: elec    时间: 2014-7-23 09:12

回复 3# DAIC


    来一个perl
  1. perl -ne 'print "$.-$_"'     1.txt>2.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2