[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何把文本文件分割成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 编辑 ]
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

是把文本平分为 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 编辑 ]

TOP

能否在顶楼注明文件的体积有多大?
因为几十KB的文件和几十MB的文件,可能要采用不同的方案来解决。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

谢谢,文件一般是8M到10M左右,采用每N行分割,N可以自己设置,或者我自己改批理也可以,比如共10000行,每100行分割,自动生成10个文本文件

TOP

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

TOP

  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 编辑 ]
1

评分人数

    • CrLf: 乐于助人,而且思路很棒~PB + 5 技术 + 1

TOP

楼上厉害, 学习了。以后多来看看。

TOP

六楼是我要的结果。赞一个。
学习学习学习

TOP

  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. )
复制代码

TOP

返回列表