中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-04 11:08
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 怎么处理批处理中的%5参数?
可打印版本  927 / 10
第1楼 honghunter 发表于 2007-05-03 12:42
中级用户 发帖 135 积分 321
怎么处理批处理中的%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
导致文件找不到,下载不了。
第2楼 everest79 发表于 2007-05-03 14:24
金牌会员 发帖 1,127 积分 2,564
^%
第3楼 honghunter 发表于 2007-05-03 15:08
中级用户 发帖 135 积分 321
问题是文件名“%5Bwallcoo.com%5D_Saki_Seto_picture_15.jpg”是另一个程序的输出,而且%的位置并不固定。
第4楼 everest79 发表于 2007-05-03 15:36
金牌会员 发帖 1,127 积分 2,564
这另一个输出是什么意思?
第5楼 honghunter 发表于 2007-05-03 17:31
中级用户 发帖 135 积分 321
另外有个exe,作用是从原始的HTML文件中,提取图片的URL。

比如,原始HTML中有:
<img src="../mxxx01/%5Bwallcoo.com%5D_spring_0162378.jpg"
第6楼 chenall 发表于 2007-05-03 23:49
银牌会员 发帖 469 积分 1,276 来自 福建泉州
楼主可以贴出处理这一代码前后的批处理或完整批处理.
就可以比较方便根据你的代码进行修改.否则可能因为不知你之前是怎么处理的而无法适用.
第7楼 honghunter 发表于 2007-05-04 09:36
中级用户 发帖 135 积分 321
是这样,我写了个小exe,作用是从输入文件中,过滤出含有特定标记的字符串。

例如,通过如下调用:


能从输入文件(例如http://www.wallcoo.com/star/Saki_Seto/html/image5.html)中,过滤出:
img src="../mxxx01/%5Bwallcoo.com%5D_Saki_Seto_picture_14.jpg"
并生成tmp.bat文件内容如下:



现在的问题就是,怎么写这个sub_get_jpg.bat ,能正确下载这个图片哪?

我原来写的sub_get_jpg.bat 的内容是:



其中已经在之前的批处理中设置为类似:
set URL_BASE=http://www.wallcoo.com/star/Saki_Seto
第8楼 honghunter 发表于 2007-05-04 09:39
中级用户 发帖 135 积分 321
所以问题主要是,传递的参数中,有位置不确定的%出现,导致被批处理当作参数进行了替换,进而导致突破URL被替换错了,导致无法下载。
第9楼 honghunter 发表于 2007-05-04 09:47
中级用户 发帖 135 积分 321
贴出俺那个小exe,没有特别测试过,谨慎使用,后果自负:P
反正在我的几个批处理里面目前使用都正常。


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

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

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

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

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

使用: getkeystr.exe
选项:
--i=输入文件 Default:"1.htm"
--m=输出格式 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=输出排序 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 ]
第10楼 honghunter 发表于 2007-05-04 09:49
中级用户 发帖 135 积分 321
下载链接:

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

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

[ Last edited by honghunter on 2007-5-3 at 09:08 PM ]
第11楼 chenall 发表于 2007-05-04 10:38
银牌会员 发帖 469 积分 1,276 来自 福建泉州
可以试试如下方法.
将生成的内容的前缀字符串去掉

改为


然后通过for来读入运行.
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023