中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个关于在“复杂”情况下判断字符串的问题
作者:
标题: 一个关于在“复杂”情况下判断字符串的问题 上一主题 | 下一主题
j0ey
初级用户





积分 31
发帖 11
注册 2006-12-15
状态 离线
『楼 主』:  一个关于在“复杂”情况下判断字符串的问题

今天遇到个问题,用了很多方法都没解决。(VBS,C/C++...)。 情况是这样的。 有一个网页是txt的,(源码) 我想提取里面的几个连接,然后根据具体的连接内容返回不同的值。。 如: images\char\44.jpg  就返回A, images\char\45.jpg  则返回B。。。。

我先用  type wangye.txt | find "images\char\"   >1.txt
得到的文件内容是:
                        <td bgcolor="#000000" align="left"> <img src="images/char/oo.gif" border=0 width="25" height="25">
                        <td bgcolor="#000000" align="left"> <img src="images/char/S.gif" border=0 width="25" height="25">
                        <td bgcolor="#000000" align="left"> <img src="images/char/cc.gif" border=0 width="25" height="25">
                        <td bgcolor="#000000" align="left"> <img src="images/char/V.gif" border=0 width="25" height="25">

其中都含有特征“images\char\” 这个代码, 我想根据images/char/后面的信息来判断。。也就是oo.gif , S.gif , cc.gif , V.gif  来返回不同的值,保持顺序不变,然后输出到一个文件中。。 请高手帮帮我~~。 谢谢

2006-12-15 06:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 2 楼』:  

  给一段提取 gif 名的批处理代码,至于究竟要返回什么值,请根据你自身的要求来做:
@echo off
for /f "tokens=3 delims=/." %%i in (1.txt) do echo %%i
pause




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-15 06:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 3 楼』:  

欣赏!简捷至极~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-15 06:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
a9319751
中级用户





积分 439
发帖 170
注册 2006-1-9
状态 离线
『第 4 楼』:  

setlocal enabledelayedexpansion
for /f "tokens=9 delims=^<^>^=^/"  %%i in (1.txt) do  (
                                      set gif=%%i
                                      set gif=!gif:"=!
                                      set gif=!gif: border=!
                                      echo !gif!
)
pause



bat c c++
2006-12-15 06:49
查看资料  发送邮件  发短消息 网志  OICQ (5040366)  编辑帖子  回复  引用回复
j0ey
初级用户





积分 31
发帖 11
注册 2006-12-15
状态 离线
『第 5 楼』:  

先谢谢各位的帮助了~~  (感动ing...)
我刚才根据上位各位的代码,自己修改了一下:
setlocal enabledelayedexpansion
for /f "tokens=9 delims=^<^>^=^/"  %%i in (123.txt) do  (
                                      set n=%%i
                                      set n=!n:"=!
                                      set n=!n: border=!
                                      set n=!n:oo.gif=o!
                                      set n=!n:S.gif=S!
                                      set n=!n:cc.gif=c!
                                      set n=!n:V.gif=V!
                                      echo !n!>>joeyjoey.txt
)
pause

替换内容成功, 但是输出的文件joeyjoey.txt的内容是这样的:
o
S
c
v
也就是说内容是竖起来的。 能不能把他们横过来那? 就像C语言里不用“/n” 那样的

2006-12-15 07:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 6 楼』:  

把 echo !n!>>joeyjoey.txt 这句改为下面指令,就可以输出内容到文件但不换行~:)
>>joeyjoey.txt set/p=!n!<nul




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-15 08:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
j0ey
初级用户





积分 31
发帖 11
注册 2006-12-15
状态 离线
『第 7 楼』:  

试了6楼朋友的方法,可是输出的是:
o set /p=o
S set /p=S
c set /p=c
V set /p=V
不知道为何

2006-12-15 08:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 8 楼』:  

我试着你的代码,并用顶楼的那些html数据试验,输出如下内容:

oScV


下面代码没有问题,兄在试一下~:)
setlocal enabledelayedexpansion
for /f "tokens=9 delims=^<^>^=^/"  %%i in (123.txt) do  (
                                      set n=%%i
                                      set n=!n:"=!
                                      set n=!n: border=!
                                      set n=!n:oo.gif=o!
                                      set n=!n:S.gif=S!
                                      set n=!n:cc.gif=c!
                                      set n=!n:V.gif=V!
                                      >>joeyjoey.txt set/p=!n!<nul
)
pause




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-15 08:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 9 楼』:  

另:兄代码中关于for的语句可以参考2楼版主代码,2楼代码精炼~:)
namejm版主的 "tokens=3 delims=/." 这段指令非常简捷,也不会出错:)
C:\TEMP\t>for /f "tokens=3 delims=/." %i in (123.txt) do echo %i


下面是执行后的输出过程:
C:\TEMP\t>echo oo
oo

C:\TEMP\t>echo S
S

C:\TEMP\t>echo cc
cc

C:\TEMP\t>echo V
V




    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-15 08:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 10 楼』:  

  把提取到的 gif 文件名横向排列可以使用如下代码(兼容各种特殊字符的文件名):
@echo off
for /f "tokens=3 delims=/." %%i in (1.txt) do call set "var=%%var%%%%i"
echo "%var%"
pause


   此帖被 +5 点积分      点击查看详情   
评分人:【 redtek 分数: +5  时间:2006-12-15 21:53




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-15 08:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
j0ey
初级用户





积分 31
发帖 11
注册 2006-12-15
状态 离线
『第 11 楼』:  

非常感谢namejm版主和redtek兄弟的帮助, 我今后会努力学习的, 呵呵 还有你们两个真的很厉害~ 羡慕。。

2006-12-15 09:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ccwan
金牌会员




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

精彩!redtek和namejm的代码很厉害,尤其namejm兄,非常简洁高效。



三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
2006-12-15 21:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: