中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 22:40
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【求助】替换批处理文件中的字符后,>之后的内容丢失 查看 643 回复 5
楼 主 【求助】替换批处理文件中的字符后,>之后的内容丢失 发表于 2009-12-19 18:49 ·  中国 四川 成都 教育网
初级用户
积分 21
发帖 21
注册 2008-10-18 17:51
17年会员
UID 128679
性别 男
状态 离线
假如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 发表于 2009-12-19 19:28 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
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 ]
3 发表于 2009-12-19 19:53 ·  中国 四川 成都 教育网
初级用户
积分 21
发帖 21
注册 2008-10-18 17:51
17年会员
UID 128679
性别 男
状态 离线
按照您的代码,问题解决了。
规避标签的方法也学到了。
再次拜谢m(_ _)m
4 发表于 2009-12-19 20:25 ·  中国 四川 成都 教育网
初级用户
积分 21
发帖 21
注册 2008-10-18 17:51
17年会员
UID 128679
性别 男
状态 离线
不好意思,又发现一个问题。
替换后虽然>没有丢失了,但是若被替换的批处理中有!的话,还是会发生问题。
5 发表于 2009-12-19 20:27 ·  中国 四川 成都 教育网
初级用户
积分 21
发帖 21
注册 2008-10-18 17:51
17年会员
UID 128679
性别 男
状态 离线
请问有没有什么解决方法呢?
6 发表于 2009-12-19 20:36 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
使用call ,本论坛内搜索相关主题
论坛跳转: