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
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
@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