中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【求助】替换批处理文件中的字符后,>之后的内容丢失
作者:
标题: 【求助】替换批处理文件中的字符后,>之后的内容丢失 上一主题 | 下一主题
kakenhi
初级用户





积分 21
发帖 21
注册 2008-10-18
状态 离线
『楼 主』:  【求助】替换批处理文件中的字符后,>之后的内容丢失

假如a.bat内容如下:
-------------------------------------
echo HelloWorld>1.txt
-------------------------------------
现在,我想将这个批处理中所有的Hello字符替换成Nice字符,
根据前辈们以前写的代码:

setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.bat) do (
    set var=%%i
    set "var=!var:Hello=Nice!"
    >>b.bat echo !var!
)

这样替换后得到的b.bat的内容变成了:
--------------------------------------
echo NiceWorld
--------------------------------------
而我原本期望得到:
--------------------------------------
echo NiceWorld>1.txt
--------------------------------------
也就是说,批处理文件中所有的">"和>后面的内容都丢失了。
怎么才能不丢失呢?

还有,如果标签中包含了需要替换的字符,也就是说假如有个标签为:
:Hello
那个标签也会被替换成:Nice。因此我不想替换标签中的字符。

如何同时满足以上两个要求呢?
小弟菜鸟,跪求高手解答m(_ _)m。
先谢谢了。

[ Last edited by kakenhi on 2009-12-19 at 19:13 ]

2009-12-19 18:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

1,按照你的代码和示例,没有发现>丢失的现象。在xp sp3系统下
2,行首的标签,可以通过判断第一个字符来实现规避替换,而goto 后的标签不加:,就可以。但此方法不能解决 call 和goto :eof的问题。
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.bat) do (set var=%%i
set "var=!var:Hello=Nice!"
if "!var1:~0,1!" == ":" (echo %%i) else echo !var!)>>b.bat
当然,也可以通过往回替换的方法来解决这个问题
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.bat) do (set var=%%i
set "var=!var:Hello=Nice!"
set "var=!var::Nice=:Hello!"
>>b.bat echo !var!)
3,这些问题,可以通过第三方命令工具解决。

[ Last edited by Hanyeguxing on 2009-12-19 at 19:44 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-12-19 19:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kakenhi
初级用户





积分 21
发帖 21
注册 2008-10-18
状态 离线
『第 3 楼』:  

按照您的代码,问题解决了。
规避标签的方法也学到了。
再次拜谢m(_ _)m

2009-12-19 19:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kakenhi
初级用户





积分 21
发帖 21
注册 2008-10-18
状态 离线
『第 4 楼』:  

不好意思,又发现一个问题。
替换后虽然>没有丢失了,但是若被替换的批处理中有!的话,还是会发生问题。

2009-12-19 20:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kakenhi
初级用户





积分 21
发帖 21
注册 2008-10-18
状态 离线
『第 5 楼』:  

请问有没有什么解决方法呢?

2009-12-19 20:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 6 楼』:  

使用call ,本论坛内搜索相关主题



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-12-19 20:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: