中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 20:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何从一个文本文件拆分为多个文本文件?
楼 主 如何从一个文本文件拆分为多个文本文件? 发表于 2007-01-05 10:49 ·  中国 广东 深圳 润迅通信集团有限公司
初级用户
积分 118
发帖 7
注册 2004-03-27 00:00
UID 21290
性别 男
状态 离线
原文件(test.txt):
**BEGIN FILE1 (注释:**BENGIN为标志,表示要从此处拆分;FILE1为拆分文件名)
aaaaaaaa ccc
bbbbbbbb cvcv
cccccccc cvcv
dddddddd tytyty
**END
**BEGIN FILE2(注释:**BENGIN为标志,表示要从此处拆分;FILE2为拆分文件名)
ggggggggggg gggg
hhhhhhhhh yyyyy
iiiiiiiiii tyty
**END
**BEGIN FILE3(注释:**BENGIN为标志,表示要从此处拆分;FILE3为要分文件名)
kdsfhkasdfh tyu
dfsdfsdfsdf tyu utyu
sdfsdfsdfadf 667676
**END

此时,需要根据**BEGIN来拆分为多个文本文件,**BENIN后面的FILE1/FILE2/FILE3等为文件名:

文件FILE1:
**BEGIN FILE1
aaaaaaaa ccc
bbbbbbbb cvcv
cccccccc cvcv
dddddddd tytyty
**END

文件FILE2:
**BEGIN FILE2
ggggggggggg gggg
hhhhhhhhh yyyyy
iiiiiiiiii tyty
**END

文件3:
**BEGIN FILE3
kdsfhkasdfh tyu
dfsdfsdfsdf tyu utyu
sdfsdfsdfadf 667676
**END

[ Last edited by zhaoxf on 2007-1-5 at 11:38 AM ]
2 发表于 2007-01-05 10:56 ·  中国 广东 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  带星号的那些行是原文件里本来就有的吗?你所举的例子太过抽象,如果不介意,请发一段真正内容出来,并在适当的地方加上注释,说明意图,以便于构思代码。
尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
3 发表于 2007-01-05 10:58 ·  中国 广东 深圳 润迅通信集团有限公司
初级用户
积分 118
发帖 7
注册 2004-03-27 00:00
UID 21290
性别 男
状态 离线
原文件(test.txt):
**BEGIN FILE1 (注释:**BENGIN为标志,表示要从此处拆分;FILE1为要拆分出的文件名)
aaaaaaaa ccc
bbbbbbbb cvcv
cccccccc cvcv
dddddddd tytyty
**END
**BEGIN FILE2(注释:**BENGIN为标志,表示要从此处拆分;FILE2为要拆分出的文件名)
ggggggggggg gggg
hhhhhhhhh yyyyy
iiiiiiiiii tyty
**END
**BEGIN FILE3(注释:**BENGIN为标志,表示要从此处拆分;FILE3为要拆分出的文件名)
kdsfhkasdfh tyu
dfsdfsdfsdf tyu utyu
sdfsdfsdfadf 667676
**END


感谢斑竹.

[ Last edited by zhaoxf on 2007-1-5 at 11:36 AM ]
4 发表于 2007-01-05 10:59 ·  中国 广东 深圳 润迅通信集团有限公司
初级用户
积分 118
发帖 7
注册 2004-03-27 00:00
UID 21290
性别 男
状态 离线
**BEGIN和**END 在原文件都有.
5 发表于 2007-01-05 11:02 ·  中国 广东 深圳 润迅通信集团有限公司
初级用户
积分 118
发帖 7
注册 2004-03-27 00:00
UID 21290
性别 男
状态 离线
付上我写的bat文件,可是有个很严重的问题,就是只能产生FILE1/FILE2/FILE3等文件,可是里面没有内容:

for /f "tokens=1, 2, 3, 4 delims=** " %%j in (test.txt) do (
if "%%j" == "BEGIN" ( >> "%%k" echo
)
)
6 发表于 2007-01-05 11:05 ·  中国 广东 深圳 润迅通信集团有限公司
初级用户
积分 118
发帖 7
注册 2004-03-27 00:00
UID 21290
性别 男
状态 离线
付上原文件和我写的BAT:
附件
test.zip (397 bytes, 下载附件所需积分 1 点, 下载次数: 34)
7 发表于 2007-01-05 11:54 ·  中国 北京 中移铁通
荣誉版主
★★★
积分 1,338
发帖 356
注册 2005-07-15 12:09
UID 40733
性别 男
状态 离线
这样试试:

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "delims=" %%i in (spil.txt) do (
set tmp=%%i
if "!tmp:~0,7!" == "**BEGIN" (
set file=!tmp:*BEGIN =!
echo %%i>!file!
) else (
echo %%i>>!file!
)
)
本帖最近评分记录 (共 3 条) 点击查看详情
评分人分数时间
lxmxn +4 2007-01-05 13:09
zhaoxf +2 2007-01-05 20:57
ccwan +5 2007-01-06 00:55
  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

8 发表于 2007-01-05 12:29 ·  中国 江西 南昌 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
9 发表于 2007-01-05 13:18 ·  中国 上海 电信
中级用户
★★
大师兄
积分 377
发帖 99
注册 2005-08-26 07:37
UID 41945
状态 离线
如文件名形如 !FILE1! ,!FILE2!,!FILE3!,则7楼代码需要打补丁:)
10 发表于 2007-01-05 20:53 ·  中国 广东 深圳 润迅通信集团有限公司
初级用户
积分 118
发帖 7
注册 2004-03-27 00:00
UID 21290
性别 男
状态 离线
感谢各位热心高人的指点。
感谢"无奈何"的源码提供。跑出来的结果完全成功!

感谢中国DOS联盟提供这样的热情论坛!
11 发表于 2007-01-05 23:00 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
UID 61449
来自 北京
状态 离线
顺便提供另外一种方法,纯属灌水

@echo off&setlocal
for /f "tokens=1*" %%a in (fi.txt) do call :pp "%%a" "%%b"
goto :eof
:pp
if /i %1 equ "**BEGIN" (
>>%~2.txt echo %~1 %~2&set a=%~2.txt
) else (
>>%a% echo %~1 %~2
)
goto :eof
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
lxmxn +4 2007-01-05 23:29
ccwan +5 2007-01-06 00:55
我今后在论坛的目标就是做个超级坏人!!!
12 发表于 2007-01-05 23:56 ·  中国 辽宁 联通
银牌会员
★★★
积分 1,212
发帖 464
注册 2006-12-13 21:11
UID 73417
性别 男
状态 离线
我也来灌水

set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("a.txt",1)
do while file.AtEndOfStream <> True
m=file.readline
if left(m,12)="**BEGIN FILE" then
set cfile=fso.createtextfile(right(m,5),true)
end if
cfile.writeline m
loop
file.close
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
lxmxn +4 2007-01-06 00:14
ccwan +5 2007-01-06 00:55
13 发表于 2007-01-06 00:56 ·  中国 河北 廊坊 三河市 移动
金牌会员
★★★★
积分 2,725
发帖 1,160
注册 2006-09-23 12:00
UID 63486
来自 河北廊坊
状态 离线
作为对无奈何、9527、jmz573515三人灌水的惩罚,每人加5分。
三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。
14 发表于 2007-01-06 01:50 ·  中国 甘肃 甘南藏族自治州 合作市 电信
金牌会员
★★★★
积分 4,103
发帖 1,744
注册 2006-01-20 13:00
UID 49241
性别 男
来自 甘肃.临泽
状态 离线
sed 解决还是不错的
15 如何从一个文本文件拆分为多个文本文件? 发表于 2007-05-02 15:22 ·  中国 云南 丽江 电信
新手上路
积分 2
发帖 1
注册 2007-01-20 02:06
UID 77077
性别 男
状态 离线
给可以发个例子和。BAT文件给我,谢谢了,ljchenghui@163.com
论坛跳转: