标题: [文本处理] [已解决]批处理如何把文本文件分割成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 份,还是两行为一份?如果是后者:- @echo off
- set file="abc.txt"
-
- for %%a in (%file%) do set "dpn=%%~dpna" & set "x=%%~xa"
- set /a line=0, m=0, n=0
- setlocal enabledelayedexpansion
- for /f "usebackq delims=" %%a in (!file!) do (
- set /a line+=1, m=line%%2, n+=m
- if !m!==0 (set last=%%a) else (echo !last!&echo %%a)>"!dpn!__!n!!x!"
- )
- 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 ...:- split.exe -l 100 Test.txt Test_
复制代码
作者: tireless 时间: 2009-7-30 13:40
- @echo off
- set file="Test.txt"
- set per=100
-
- for %%a in (%file%) do set "dpn=%%~dpna" & set "x=%%~xa"
- set /a count=per-1, n=0
- setlocal enabledelayedexpansion
- for /f "usebackq delims=" %%a in (!file!) do (
- set /a count+=1, n=count/per
- echo %%a>>"!dpn!__!n!!x!"
- )
复制代码
[ 本帖最后由 tireless 于 2009-7-30 13:55 编辑 ]
作者: smith203 时间: 2011-3-8 14:16
楼上厉害, 学习了。以后多来看看。
作者: hbyndyj 时间: 2011-10-9 01:05
六楼是我要的结果。赞一个。
作者: CrLf 时间: 2011-10-9 17:19
- @echo off&setlocal enabledelayedexpansion
- set /a 行数=10
- set filename=a.txt
- for %%z in ("%filename%") do (
- for /f %%a in ('find /c /v ""^<%%z') do (
- for /l %%b in (1 %行数% %%a) do (
- for /l %%c in (1 1 10) do (
- set str=
- set /p str=
- echo !str!
- )
- )>%%~nz%%b%%~xz
- )<%%z
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |