Board logo

标题: [文本处理] [已解决]批处理如何把文本文件分割成N个文本文件? [打印本页]

作者: zyouong    时间: 2009-7-29 23:47     标题: [已解决]批处理如何把文本文件分割成N个文本文件?

比如我现在有一文本文件,我要上传,但是太大(文件8-12M之间),不允许,我想把它分割成N个小文件(按行分割,行数可以自行设定),文件内容全部是数字和部分符号,比如内容:
1 2 3 4 5 6+7
2 3 4 5 6 7+8
3 4 5 6 7 8+9
4 5 6 7 8 9+10
5 6 7 8 9 10+11
6 7 8 9 10 11+12
7 8 9 10 11 12+13
8 9 10 11 12 13+14
9 10 11 12 13 14+15
10 11 12 13 14 15+16
现在想用批处理自动把它分割成N个文本文件,要求为按行分割(行数可以自行设置)这次比如共10行,我要分成每2行一个文件,则第一个为
1 2 3 4 5 6+7
2 3 4 5 6 7+8
第二个文本的内容为
3 4 5 6 7 8+9
4 5 6 7 8 9+10
第三个文本的内容为
5 6 7 8 9 10+11
6 7 8 9 10 11+12

.................

这个批处理该如何写呢?

[ 本帖最后由 zyouong 于 2009-7-30 12:55 编辑 ]
作者: tireless    时间: 2009-7-30 00:42

是把文本平分为 5 份,还是两行为一份?如果是后者:
  1. @echo off
  2. set file="abc.txt"
  3. for %%a in (%file%) do set "dpn=%%~dpna" & set "x=%%~xa"
  4. set /a line=0, m=0, n=0
  5. setlocal enabledelayedexpansion
  6. for /f "usebackq delims=" %%a in (!file!) do (
  7.   set /a line+=1, m=line%%2, n+=m
  8.   if !m!==0 (set last=%%a) else (echo !last!&echo %%a)>"!dpn!__!n!!x!"
  9. )
  10. if !m!==0 echo !last!>"!dpn!__!n!!x!"
复制代码

[ 本帖最后由 tireless 于 2009-7-30 01:45 编辑 ]
作者: Batcher    时间: 2009-7-30 00:51

能否在顶楼注明文件的体积有多大?
因为几十KB的文件和几十MB的文件,可能要采用不同的方案来解决。
作者: zyouong    时间: 2009-7-30 08:54

原帖由 Batcher 于 2009-7-30 00:51 发表
能否在顶楼注明文件的体积有多大?
因为几十KB的文件和几十MB的文件,可能要采用不同的方案来解决。

谢谢,文件一般是8M到10M左右,采用每N行分割,N可以自己设置,或者我自己改批理也可以,比如共10000行,每100行分割,自动生成10个文本文件
作者: tireless    时间: 2009-7-30 13:02

分割 Test.txt,每份 100 行,文件名是 Test_aa、Test_ab、Test_ac ...:
  1. split.exe -l 100 Test.txt Test_
复制代码

作者: tireless    时间: 2009-7-30 13:40

  1. @echo off
  2. set file="Test.txt"
  3. set per=100
  4. for %%a in (%file%) do set "dpn=%%~dpna" & set "x=%%~xa"
  5. set /a count=per-1, n=0
  6. setlocal enabledelayedexpansion
  7. for /f "usebackq delims=" %%a in (!file!) do (
  8.   set /a count+=1, n=count/per
  9.   echo %%a>>"!dpn!__!n!!x!"
  10. )
复制代码

[ 本帖最后由 tireless 于 2009-7-30 13:55 编辑 ]
作者: smith203    时间: 2011-3-8 14:16

楼上厉害, 学习了。以后多来看看。
作者: hbyndyj    时间: 2011-10-9 01:05

六楼是我要的结果。赞一个。
作者: CrLf    时间: 2011-10-9 17:19

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a 行数=10
  3. set filename=a.txt
  4. for %%z in ("%filename%") do (
  5.    for /f %%a in ('find /c /v ""^<%%z') do (
  6.       for /l %%b in (1 %行数% %%a) do (
  7.          for /l %%c in (1 1 10) do (
  8.             set str=
  9.             set /p str=
  10.             echo !str!
  11.          )
  12.       )>%%~nz%%b%%~xz
  13.    )<%%z
  14. )
复制代码





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