Board logo

标题: 批处理中如何替换文本中的<和>字符 [打印本页]

作者: btandd     时间: 2006-11-24 00:06    标题: 批处理中如何替换文本中的<和>字符

代码如下replace.bat:
@echo off
setlocal enabledelayedexpansion
set /a a=1
for %%x in (*.xml) do (
        for /f "tokens=*" %%i in (%%x) do (
                set "var=%%i"
                if not !var!.==. (
                   set "var=!var:%1=%2!"
                   echo !var!!>>!a!.xml
                )
        )
set /a a=!a!+1
)

该文件是要替换所有xml文件中的某个字符串为另一个,它带有两个命令行参数,%1为被替换的字符串,%2是替换为的字符串,但是如果字符串中包含<,>,\等特殊意义的字符,就不成了,请教解决方案,谢谢!
作者: NaturalJ0     时间: 2006-11-24 00:51
%var:^<=% 应该可以
作者: btandd     时间: 2006-11-24 07:06


  Quote:
Originally posted by NaturalJ0 at 2006-11-23 11:51 AM:
%var:^<=% 应该可以

不行哦,比如我这样调用上面的脚本:replace <Wait Value="300"/> <Wait Value="100"/>

还是不能正确处理<>.
作者: 不得不爱     时间: 2006-11-24 07:31
那就可能不好办了
作者: tao0610     时间: 2006-11-24 13:49
>,<,^好像在批处理里替换都会有问题。
作者: zh159     时间: 2006-11-24 14:08
echo "%N%"
set "N=%N:<=%"
set "N=%N:>=%"

好像""内的<>都不用^就可以正常输出,不用""就要^
作者: NaturalJ0     时间: 2006-11-24 21:50

@echo off
setlocal enabledelayedexpansion
set var="</abc>"
echo %var%
echo !var:^<=!
echo !var:^>=!
echo !var:^/=!
echo !var:"=!
pause

作者: ccwan     时间: 2006-11-24 22:16
不错!
作者: 不得不爱     时间: 2006-11-24 22:59
楼上几位好像没有看3楼的帖子吧
作者: vkill     时间: 2006-11-25 00:03
替换我更喜欢用sed
作者: NaturalJ0     时间: 2006-11-25 00:12
replace <Wait Value="300"/> <Wait Value="100"/>
这句调用
里面的 <> 是重定向的作用
加上^可以解决
但你要替换的字符串中含有空格
前后要加"
可字符串中还有"

所以。。。你还是用 sed 吧
作者: tao0610     时间: 2006-11-25 03:30


  Quote:
@echo off
setlocal enabledelayedexpansion
set var="</abc>"

这个变量var是种特殊情况,关键起作用的还是""
变量延迟和^可以不需要,直接替换就可以!
@echo off
set var="</abc>"
echo %var%
echo %var:<=%
echo %var:>=%
echo %var:/=%
pause
而3楼的例子反而是这种特殊的有""的变量出现时会有错误!
看来替换时还要判断一下。。
作者: zh159     时间: 2006-11-25 04:02
3楼的帖子是不是要把“<Wait Value="300"/>”替换为“<Wait Value="100"/>”??

如果是,那就:
@echo off
echo "<Wait Value="300"/>"
set "N=<Wait Value="300"/>"
set "N=%N:300=100%"
set "N=%N:<=^<%"
set "N=%N:>=^>%"
echo %N%
pause