中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-04 12:09
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 怎么处理批处理中的%5参数? 查看 930 回复 10
楼 主 怎么处理批处理中的%5参数? 发表于 2007-05-03 12:42 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
我的意思是,在批处理里面,要传递的参数中间包括位置不固定的%号,会形成类似%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 发表于 2007-05-03 14:24 ·  中国 广东 广州 黄埔区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
^%
3 发表于 2007-05-03 15:08 ·  中国 上海 浦东新区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
问题是文件名“%5Bwallcoo.com%5D_Saki_Seto_picture_15.jpg”是另一个程序的输出,而且%的位置并不固定。
4 发表于 2007-05-03 15:36 ·  中国 广东 广州 黄埔区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
这另一个输出是什么意思?
5 发表于 2007-05-03 17:31 ·  中国 上海 杨浦区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
另外有个exe,作用是从原始的HTML文件中,提取图片的URL。

比如,原始HTML中有:
<img src="../mxxx01/%5Bwallcoo.com%5D_spring_0162378.jpg"
6 发表于 2007-05-03 23:49 ·  中国 福建 泉州 石狮市 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
23年会员
UID 586
性别 男
来自 福建泉州
状态 离线
楼主可以贴出处理这一代码前后的批处理或完整批处理.
就可以比较方便根据你的代码进行修改.否则可能因为不知你之前是怎么处理的而无法适用.
QQ:366840202
http://chenall.net
7 发表于 2007-05-04 09:36 ·  中国 上海 杨浦区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
是这样,我写了个小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
8 发表于 2007-05-04 09:39 ·  中国 上海 杨浦区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
所以问题主要是,传递的参数中,有位置不确定的%出现,导致被批处理当作参数进行了替换,进而导致突破URL被替换错了,导致无法下载。
9 发表于 2007-05-04 09:47 ·  中国 上海 杨浦区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
贴出俺那个小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 发表于 2007-05-04 09:49 ·  中国 上海 杨浦区 电信
中级用户
★★
积分 321
发帖 135
注册 2007-02-04 04:48
19年会员
UID 78578
性别 男
状态 离线
下载链接:

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 发表于 2007-05-04 10:38 ·  中国 福建 泉州 石狮市 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
23年会员
UID 586
性别 男
来自 福建泉州
状态 离线
可以试试如下方法.
将生成的内容的前缀字符串去掉

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
论坛跳转: