中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何用其他文本内容覆盖某一文本指定段落的内容
作者:
标题: 如何用其他文本内容覆盖某一文本指定段落的内容 上一主题 | 下一主题
synn2006
新手上路





积分 12
发帖 5
注册 2006-10-27
状态 离线
『楼 主』:  如何用其他文本内容覆盖某一文本指定段落的内容


──────────────── 版务记录 ────────────────
执行:namejm
原标题:txt文本内容处理问题
修改后标题:如何用其他文本内容覆盖某一文本指定段落的内容
说明:因原标题过于模糊,不便于论坛的搜索和管理,在本提示发表三日之后,
  楼主尚未更改标题,现由本人强制修改标题,并扣除楼主2点积分。
──────────────── 版务记录 ────────────────


有a.txt和b.txt两个文件(内容纯属虚构,但足以表达我的意思):
a.txt内容如下:
[date]:
monday
[name]:
yang li
wang yu
shan liang
[thing]:
meeting
study

b.txt的内容如下:
zhou zhuo
tian li
shang xiao nan
sun chao

能不能用一个bat实现如下功能:
每次先删除a.txt中[name]:后面的所有人名,然后把b.txt中的人名内容加到其中,使其变成如下显示:
a.txt:
[date]:
monday
[name]:
zhou zhuo
tian li
shang xiao nan
sun chao
[thing]:
meeting
study

以后b中的内容可能总是会变,我只是想一执行bat,就把它们都导入a.txt中的name 后面。
如果bat实现不了这种操作,能不能告诉我用vbs怎么编写?
另外还有一个问题,如何在批处理文件中启动执行一个vbs呢?

期待大家的回答,thanks in advance!!!!!!!!!!!!!!!!!!!!!

[ Last edited by namejm on 2007-1-25 at 01:00 PM ]

   此帖被 -2 点积分    点击查看详情   
评分人:【 namejm 分数: -2  时间:2007-1-26 01:59


2006-10-28 03:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 2 楼』:  

试试这个命令,写在一行有点长。
sed -e "/\[name\]:/,/\[.*\]:/{/^ *[^[]/d}" -e "/\[name\]:/rb.txt" a.txt
sed 下载地址:http://www.student.northpark.edu/pemente/sed/gsed407x.zip

   此帖被 +10 点积分         点击查看详情   
评分人:【 redtek 分数: +10  时间:2006-10-28 05:17




  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-10-28 04:34
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 3 楼』:  

sed: -e expression #1, char 2: Unterminated address regex
这个是什么意思?



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-28 04:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  


  这个是 sed 命令的错误提示。是语法错误了吧。。


2006-10-28 04:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 5 楼』:  

SED这个命令功能不错



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-28 04:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 6 楼』:  

我是打的SED/?得到的



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-28 04:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 7 楼』:  

Re qwe1234567
这是错误提示,老兄换个高版本的再试一下,把二楼的链接下下来。



  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-10-28 04:57
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  


  要查看帮助还要这样打才行:"sed -h"


2006-10-28 05:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 9 楼』:  

一会儿好几贴了,没有看到你们先前的回复。我晕,我以为用老的版本运行出现的错误提示呢。不过老的版本 sed 302 运行确实有问题,得小改动一下。

  Quote:
sed -e "/\[name\]:/,/\[.*\]:/{/^ *[^[]/d;}" -e "/\[name\]:/rb.txt" a.txt





  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-10-28 05:16
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 10 楼』:  

这个太强大了,欣赏~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-28 05:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

  如果非得用批处理来解决不可的话,可以试试下面的代码(如果a.txt中的行数量十分巨大的话,速度将会比较慢):
@echo off
cd.>test.txt
for /f "tokens=1* delims=:" %%i in ('findstr /n . a.txt') do (
    if not "%%j"=="[name]:" (>>test.txt echo %%j) else (
        set line=%%i&goto insert
    )
)

:insert
>>test.txt echo [name]:
>>test.txt type b.txt
>>test.txt echo.

set flag=1
for /f "skip=%line% delims=" %%i in (a.txt) do (
    if "%%i"=="[thing]:" set flag=
    if not defined flag >>test.txt echo %%i
   
    )
)
start test.txt
[ Last edited by namejm on 2007-1-25 at 12:54 PM ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-28 05:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
synn2006
新手上路





积分 12
发帖 5
注册 2006-10-27
状态 离线
『第 12 楼』:  

谢谢大家的帮助,我知道啦~~~

2006-10-29 23:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: