中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 菜鸟求助:如何替换文本文件的内容?
« [1] [2] »
作者:
标题: 菜鸟求助:如何替换文本文件的内容? 上一主题 | 下一主题
jtyuer
初级用户





积分 73
发帖 29
注册 2006-8-13
状态 离线
『楼 主』:  菜鸟求助:如何替换文本文件的内容?

假定tmp.txt文件内容如下:(其中一部分)
miniime.tpl
quick.ime
winar30.ime
arphr.tbl
arptr.tbl
array30.tab
arrayhw.tab
WINGB.IME
WINPY.IME
WINPY.MB
WINSP.IME
WINSP.MB

想把tmp.txt中每一行的最后一个字符转换成_,即内容转换成如下格式:
miniime.tp_
quick.im_
winar30.im_
arphr.tb_
arptr.tb_
array30.ta_
arrayhw.ta_
WINGB.IM_
WINPY.IM_
WINPY.MB_
WINSP.IM_
WINSP.MB_
每一行都如此处理,用sed该如何做? 或者还有什么其它更简便的方法?
请各位老大帮帮忙,先谢谢大家了!

2006-8-17 20:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 2 楼』:  

如果后缀只存在2个字母或3个字母的情况,下面的脚本基本可以满足你的要求:
@echo off
   for /f %%i in (tmp.txt) do call :replace %%i_
   pause
goto :eof

:replace
    set var=%1
    if not "%var:~-4,1%" == "." set var=%var:~0,-4%%var:~-4,2%_
    echo %var%
goto :eof


2006-8-17 21:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
jtyuer
初级用户





积分 73
发帖 29
注册 2006-8-13
状态 离线
『第 3 楼』:  

高手就是高手,谢谢版主!
假如用sed怎么做呢?

2006-8-17 21:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


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

  下面这段代码更具有通用性,而不用考虑后缀名的字符个数、文件名是否含有空格等情况:
@echo off
ren tmp.txt tmp_bak.txt
cd.>tmp.txt
for /f "tokens=*" %%i in (tmp_bak.txt) do (
    echo %%i_>>tmp.txt
)
start tmp.txt
  sorry,看走眼了:(。这段代码只是在每行的最后添加_,并不是用_替换每行最后的字符,5楼才是正解。

[ Last edited by namejm on 2006-8-18 at 12:47 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-17 22:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 5 楼』:  

楼上的,楼主的要求是“每一行的最后一个字符转换成_”
应该是
@echo off
ren tmp.txt tmp_bak.txt
cd.>tmp.txt
setlocal EnableDelayedExpansion
for /f "tokens=*" %%i in (tmp_bak.txt) do (
    set Name=%%i
    echo !Name:~0,-1!_>>tmp.txt)
start tmp.txt


2006-8-18 02:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


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

  一口气读完顶楼帖子,然后兴致勃勃地把代码就写出来了,还在纳闷3742668版主为什么这么简洁的代码不用,偏偏要弄个复杂的方案出来,还有这样那样的限制,没想到居然是粗心大意看走了眼,呵呵。5楼正解。

[ Last edited by namejm on 2006-8-18 at 07:44 ]



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





积分 18
发帖 5
注册 2006-8-11
状态 离线
『第 7 楼』:  

!Name:~0,-1!_
这是什么意思?5楼的,看不懂,请教!

2006-8-18 17:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


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

  启用了变量延迟之后,引用变量要把百分号对改成叹号对。!Name:~0,-1!_表示截取字符串的时候,抛弃最后一个字符,然后再加上_。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-18 17:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 9 楼』:  

大家不要太浮躁了,请注意对比tmp.txt的最后3个字符串有什么异同。

2006-8-18 21:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


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

Re 3742668『第 10 楼』:   

  仔细对比了一下,狂吐血中。

  楼主说"想把tmp.txt中每一行的最后一个字符转换成_",但是它最后一行的WINSP.MB为什么偏偏要转成WINSP.MB_而不是WINSP.M_呢?我认为楼主的说法有自相矛盾的地方。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-18 23:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 11 楼』:  

我看还是楼主的tmp.txt错了

2006-8-19 02:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jtyuer
初级用户





积分 73
发帖 29
注册 2006-8-13
状态 离线
『第 12 楼』:  

呵呵,是我表达错误了,我的本意就是其中的WINSP.MB也要处理成WINSP.MB_

2006-8-19 11:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


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

Re jtyuer 『第 12 楼』:  

  如果是你的表达错了,那么,你的本意准确的表达就是:文件的后缀名字符有2~3个不等。如果是2个,则在最后添加_;如果是3个,则把最后一个字符用_替换,总之,要保持新的后缀名为3个字符。如此一来,3742668第二楼的才是正解。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-19 11:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
maya0su
中级用户




积分 241
发帖 131
注册 2005-9-28
状态 离线
『第 14 楼』:  

能用一个空格替代一行字符吗?
就是说,可以在批处理中,删除那行字符!



房东说:这娃是个好孩子!
2006-8-27 20:38
查看资料  发送邮件  发短消息 网志  OICQ (55115315)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


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

  可以用findstr /v来删除指定行的字符,但是如果要用空格来代替,估计会比较困难。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-8-27 20:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: