Board logo

标题: [文本处理] 批处理怎样把文件的指定行写入另一个文件? [打印本页]

作者: shen_shi0    时间: 2011-4-12 11:22     标题: 批处理怎样把文件的指定行写入另一个文件?

批处理数据。记事本b.txt,要a.txt的1行12行24行36行……(12的倍数行)直至a.txt最后一行。求批处理,新手寻求帮助。
作者: CrLf    时间: 2011-4-12 12:55

本帖最后由 zm900612 于 2011-4-12 14:20 编辑
  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.     set /a m+=1,"test=1/(m%%12*!!(m-1))"||echo;%%a
  4. ))>b.txt 2>nul
  5. pause
复制代码

作者: shen_shi0    时间: 2011-4-12 13:51

谢谢了 试试
作者: shen_shi0    时间: 2011-4-12 13:54

不对啊……b.txt 和a.txt 一样的
作者: shen_shi0    时间: 2011-4-12 13:56

1
2
3
4
5
6
7
8
9
10
如果要2的倍数行b.txt就是
2
4
6
8
10
作者: hanyeguxing    时间: 2011-4-12 14:13

本帖最后由 hanyeguxing 于 2011-4-12 14:33 编辑
  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do 2>nul set/an+=1,"1/(n%%12*(n-1))"||echo;%%a)>b.txt
复制代码
  1. @echo off&set n=-1
  2. :a
  3. if not %n%==-1 set "m=skip=%n% "
  4. (for /f "%m%delims=" %%a in (a.txt) do (
  5. echo;%%a
  6. set/an+=12
  7. goto:a
  8. ))>b.txt
复制代码

作者: CrLf    时间: 2011-4-12 14:20

两个小错误,已修正。
6楼代码未包含第一行...
作者: hanyeguxing    时间: 2011-4-12 14:32

7# zm900612


为什么要写成!!(m-1) 呢?
作者: CrLf    时间: 2011-4-12 14:43

因为没找到更好的算法能同时包括1和所有12的倍数...
作者: hanyeguxing    时间: 2011-4-12 14:49

9# zm900612


我的意思是,为什么 (m-1) 前要用 !! 呢?
作者: CrLf    时间: 2011-4-12 15:16

有道理,考虑不周,多余了的
作者: shen_shi0    时间: 2011-4-12 16:40

百度知道上求得的答案!谢谢大家了!呵呵!
  1. @echo off
  2. echo 批处理数据。记事本b.txt,要a.txt的1行12行24行36行……(12的倍数行)直至a.txt最后一行。
  3. echo by breakme QQ:49849628
  4. set b=
  5. setlocal EnableDelayedExpansion
  6. rem 读取文件有多少行?并将第一行数据读取
  7. for /f "tokens=1* delims=*" %%i in (a.txt) do set /a b+=1 && if "!b!"=="1" echo %%i>>b.txt
  8. rem 按规律匹配数据 0 开始,每加 12 就读取一行
  9. for /l %%i in (0,12,!b!) DO call :a %%i
  10. exit
  11. :a
  12. set a=
  13. for /f "tokens=1* delims=*" %%i in ('type a.txt') do (
  14. set /a a+=1
  15. if "!a!"=="%1" echo %%i>>b.txt
  16. )
  17. goto :eof
复制代码

作者: CrLf    时间: 2011-4-12 17:46

这效率...            
作者: batman    时间: 2011-4-12 19:03

为什么不用findstr /n呢?
作者: hanyeguxing    时间: 2011-4-12 19:12

14# batman


因为用了findstr /n后还得用set/a
作者: Batcher    时间: 2011-4-12 21:10

5# shen_shi0
  1. gawk "!(NR%2)" a.txt | more >b.txt
复制代码

作者: batman    时间: 2011-4-13 11:40

14# batman


因为用了findstr /n后还得用set/a
hanyeguxing 发表于 2011-4-12 19:12

我看不一定哦。。。




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