中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 21:46
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » 【求助】替换批处理文件中的字符后,>之后的内容丢失
可打印版本  640 / 5
第1楼 kakenhi 发表于 2009-12-19 18:49
初级用户 发帖 21 积分 21
【求助】替换批处理文件中的字符后,>之后的内容丢失
假如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 ]
第2楼 Hanyeguxing 发表于 2009-12-19 19:28
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
1,按照你的代码和示例,没有发现>丢失的现象。在xp sp3系统下
2,行首的标签,可以通过判断第一个字符来实现规避替换,而goto 后的标签不加:,就可以。但此方法不能解决 call 和goto :eof的问题。



当然,也可以通过往回替换的方法来解决这个问题



3,这些问题,可以通过第三方命令工具解决。

[ Last edited by Hanyeguxing on 2009-12-19 at 19:44 ]
第3楼 kakenhi 发表于 2009-12-19 19:53
初级用户 发帖 21 积分 21
按照您的代码,问题解决了。
规避标签的方法也学到了。
再次拜谢m(_ _)m
第4楼 kakenhi 发表于 2009-12-19 20:25
初级用户 发帖 21 积分 21
不好意思,又发现一个问题。
替换后虽然>没有丢失了,但是若被替换的批处理中有!的话,还是会发生问题。
第5楼 kakenhi 发表于 2009-12-19 20:27
初级用户 发帖 21 积分 21
请问有没有什么解决方法呢?
第6楼 Hanyeguxing 发表于 2009-12-19 20:36
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
使用call ,本论坛内搜索相关主题
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023