中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么处理批处理中的%5参数?
作者:
标题: 怎么处理批处理中的%5参数? 上一主题 | 下一主题
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『楼 主』:  怎么处理批处理中的%5参数?

我的意思是,在批处理里面,要传递的参数中间包括位置不固定的%号,会形成类似%5这样的保留参数,怎么办?

我本来是:
wget "http://www.wallcoo.com/star/Saki_Seto/mxxx01/%5Bwallcoo.com%5D_Saki_Seto_picture_15.jpg" -Ohtml\3.jpg


文件名就是/%5Bwallcoo.com%5D_Saki_Seto_picture_15.jpg,但是会被批处理替换成
/Bwallcoo.comD_Saki_Seto_picture_15.jpg
导致文件找不到,下载不了。



探讨批量下载与智能化的下载
2007-5-3 12:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 2 楼』:  

^%

2007-5-3 14:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 3 楼』:  

问题是文件名“%5Bwallcoo.com%5D_Saki_Seto_picture_15.jpg”是另一个程序的输出,而且%的位置并不固定。



探讨批量下载与智能化的下载
2007-5-3 15:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 4 楼』:  

这另一个输出是什么意思?

2007-5-3 15:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 5 楼』:  

另外有个exe,作用是从原始的HTML文件中,提取图片的URL。

比如,原始HTML中有:
<img src="../mxxx01/%5Bwallcoo.com%5D_spring_0162378.jpg"



探讨批量下载与智能化的下载
2007-5-3 17:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 6 楼』:  

楼主可以贴出处理这一代码前后的批处理或完整批处理.
就可以比较方便根据你的代码进行修改.否则可能因为不知你之前是怎么处理的而无法适用.



QQ:366840202
http://chenall.net
2007-5-3 23:49
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (366840202)  编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 7 楼』:  

是这样,我写了个小exe,作用是从输入文件中,过滤出含有特定标记的字符串。

例如,通过如下调用:
getkeystr.exe -cmd="call sub_get_jpg.bat " -i=D:\wallcoo.com\html\3.html -bs="您的位置:<a href" -be="../ad.js" -s="../" -e=".jpg" -k="Bwallcoo.com" 1>b:\tmp.bat
能从输入文件(例如http://www.wallcoo.com/star/Saki_Seto/html/image5.html)中,过滤出:
img src="../mxxx01/%5Bwallcoo.com%5D_Saki_Seto_picture_14.jpg"
并生成tmp.bat文件内容如下:
call sub_get_jpg.bat  tmp0 mxxx01/%5Bwallcoo.com%5D_Saki_Seto_picture_14
现在的问题就是,怎么写这个sub_get_jpg.bat  ,能正确下载这个图片哪?

我原来写的sub_get_jpg.bat  的内容是:
wget.exe --user-agent="Mozilla/4.0 (compatible; MSIE 6.0; Windws NT 5.1)" --cookies=on "%URL_BASE%/%2.jpg" -O%STORE_PATH%\jpg%1.jpg
其中已经在之前的批处理中设置为类似:
set URL_BASE=http://www.wallcoo.com/star/Saki_Seto



探讨批量下载与智能化的下载
2007-5-4 09:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 8 楼』:  

所以问题主要是,传递的参数中,有位置不确定的%出现,导致被批处理当作参数进行了替换,进而导致突破URL被替换错了,导致无法下载。



探讨批量下载与智能化的下载
2007-5-4 09:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 9 楼』:  

贴出俺那个小exe,没有特别测试过,谨慎使用,后果自负:P
反正在我的几个批处理里面目前使用都正常。

  Quote:
【授权说明】
本工具采用GNU授权。

【特别声明】
没有特别测试过,请谨慎使用,后果自负:P
反正在我的几个批处理里面目前使用都正常。

如果发现问题,欢迎邮件反馈BUG到我的邮箱。

【参数说明】
D:\>getkeystr -help

从目标文件中过滤出特定字符串.

使用: getkeystr.exe [ 选项 ]
选项:
  --i=输入文件                         Default:"1.htm"
  --m=输出格式[0,1]                    Default:0
  --bs=标志有效段落开始的字符串        Default:"<body"
  --be=标志有效段落结束的字符串        Default:"</body"
  --s=标志目标字符串开始的字符串       Default:"href=""
  --e=标志目标字符串结束的字符串       Default:"""
  --k=标志目标字符串有效的字符串       Default:"http://"
  --p=输出文件文件名的前缀字符串       Default:"tmp"
  --cmd=输出目标字符串的前缀           Default:"call sub_get_page.bat "
  --pt=预处理脚本文件名                Default:null
  --so=输出排序[0,1,2]                 Default:0
  --debug 显示debug信息
  --help
  --version

--m:1=用双引号将截取的字符串括起来.
--pt:必须有一个名为do_pretreatment()的sub.
--so:0=不排序;1=升序;2=降序.

作者: honghunter  ( honghunter@gmail.com)


D:\>

【处理过程】
简单说一下处理过程:
0,指定了预处理脚步的话,先对输入文件执行预处理脚本。
  主要进行一些简单的字符的替换工作,只是用在没有字符替换工具的时候。
  因为例子中使用的字符替换函数(func_ReplaceString)是我自己写的,功能有限,效率也不高。
1,截取输入文件中从bs开始到be之间的内容。
2,在截取到的有效段落内,逐行查找有k的行。
3,找到的行,截取从s到e的部分。
4,按照so的设置,对截取到的字符串组成的列表做排序。
5,输出列表。
输出列表的时候,在每行的开始,先输出cmd,然后是p+输出航的序号,然后是截取到的字符串。

[ Last edited by honghunter on 2007-5-3 at 09:07 PM ]



探讨批量下载与智能化的下载
2007-5-4 09:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
honghunter
中级用户





积分 321
发帖 135
注册 2007-2-4
状态 离线
『第 10 楼』:  

下载链接:

http://groups.google.com/group/justdownit/web/getkeystr0.1.4.rar

含有exe文件,下载后请先查毒。

[ Last edited by honghunter on 2007-5-3 at 09:08 PM ]



探讨批量下载与智能化的下载
2007-5-4 09:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 11 楼』:  

可以试试如下方法.
将生成的内容的前缀字符串去掉
call sub_get_jpg.bat  tmp0 mxxx01/%5Bwallcoo.com%5D_Saki_Seto_picture_14
改为
tmp0 mxxx01/%5Bwallcoo.com%5D_Saki_Seto_picture_14
然后通过for来读入运行.
getkeystr.exe -cmd="call sub_get_jpg.bat " -i=D:\wallcoo.com\html\3.html -bs="您的位置:<a href" -be="../ad.js" -s="../" -e=".jpg" -k="Bwallcoo.com" 1>b:\tmp.bat

for /f "usebackq tokens=*" %%i in (tmp.bat) do sub_get_jpg.bat  %%i




QQ:366840202
http://chenall.net
2007-5-4 10:38
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (366840202)  编辑帖子  回复  引用回复

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


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



论坛跳转: