中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理中如何替换文本中的<和>字符
作者:
标题: 批处理中如何替换文本中的<和>字符 上一主题 | 下一主题
btandd
新手上路





积分 14
发帖 5
注册 2006-11-23
状态 离线
『楼 主』:  批处理中如何替换文本中的<和>字符

代码如下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是替换为的字符串,但是如果字符串中包含<,>,\等特殊意义的字符,就不成了,请教解决方案,谢谢!

2006-11-24 00:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 2 楼』:  

%var:^<=% 应该可以

2006-11-24 00:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
btandd
新手上路





积分 14
发帖 5
注册 2006-11-23
状态 离线
『第 3 楼』:  



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

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

还是不能正确处理<>.

2006-11-24 07:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 4 楼』:  

那就可能不好办了



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-11-24 07:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 5 楼』:  

>,<,^好像在批处理里替换都会有问题。




认识自己,降伏自己,改变自己
,才能改变别人!
2006-11-24 13:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 6 楼』:  

echo "%N%"
set "N=%N:<=%"
set "N=%N:>=%"

好像""内的<>都不用^就可以正常输出,不用""就要^

   此帖被 +1 点积分    点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-11-24 22:25


2006-11-24 14:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 7 楼』:  


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


   此帖被 +1 点积分    点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-11-24 22:24


2006-11-24 21:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




积分 2725
发帖 1160
注册 2006-9-23
来自 河北廊坊
状态 离线
『第 8 楼』:  

不错!



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-11-24 22:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 9 楼』:  

楼上几位好像没有看3楼的帖子吧



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-11-24 22:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 10 楼』:  

替换我更喜欢用sed

2006-11-25 00:03
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 11 楼』:  

replace <Wait Value="300"/> <Wait Value="100"/>
这句调用
里面的 <> 是重定向的作用
加上^可以解决
但你要替换的字符串中含有空格
前后要加"
可字符串中还有"

所以。。。你还是用 sed 吧

2006-11-25 00:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 12 楼』:  



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

这个变量var是种特殊情况,关键起作用的还是""
变量延迟和^可以不需要,直接替换就可以!
@echo off
set var="</abc>"
echo %var%
echo %var:<=%
echo %var:>=%
echo %var:/=%
pause
而3楼的例子反而是这种特殊的有""的变量出现时会有错误!
看来替换时还要判断一下。。

   此帖被 +1 点积分    点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-11-25 03:35





认识自己,降伏自己,改变自己
,才能改变别人!
2006-11-25 03:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 13 楼』:  

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


   此帖被 +1 点积分    点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-11-25 07:52


2006-11-25 04:02
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: