Board logo

标题: 【求助】替换批处理文件中的字符后,>之后的内容丢失 [打印本页]

作者: kakenhi     时间: 2009-12-19 18:49    标题: 【求助】替换批处理文件中的字符后,>之后的内容丢失

假如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 ]
作者: Hanyeguxing     时间: 2009-12-19 19:28
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 ]
作者: kakenhi     时间: 2009-12-19 19:53
按照您的代码,问题解决了。
规避标签的方法也学到了。
再次拜谢m(_ _)m
作者: kakenhi     时间: 2009-12-19 20:25
不好意思,又发现一个问题。
替换后虽然>没有丢失了,但是若被替换的批处理中有!的话,还是会发生问题。
作者: kakenhi     时间: 2009-12-19 20:27
请问有没有什么解决方法呢?
作者: Hanyeguxing     时间: 2009-12-19 20:36
使用call ,本论坛内搜索相关主题