Board logo

标题: 怎么处理批处理中的%5参数? [打印本页]

作者: honghunter     时间: 2007-5-3 12:42    标题: 怎么处理批处理中的%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
导致文件找不到,下载不了。
作者: everest79     时间: 2007-5-3 14:24
^%
作者: honghunter     时间: 2007-5-3 15:08
问题是文件名“%5Bwallcoo.com%5D_Saki_Seto_picture_15.jpg”是另一个程序的输出,而且%的位置并不固定。
作者: everest79     时间: 2007-5-3 15:36
这另一个输出是什么意思?
作者: honghunter     时间: 2007-5-3 17:31
另外有个exe,作用是从原始的HTML文件中,提取图片的URL。

比如,原始HTML中有:
<img src="../mxxx01/%5Bwallcoo.com%5D_spring_0162378.jpg"
作者: chenall     时间: 2007-5-3 23:49
楼主可以贴出处理这一代码前后的批处理或完整批处理.
就可以比较方便根据你的代码进行修改.否则可能因为不知你之前是怎么处理的而无法适用.
作者: honghunter     时间: 2007-5-4 09:36
是这样,我写了个小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
作者: honghunter     时间: 2007-5-4 09:39
所以问题主要是,传递的参数中,有位置不确定的%出现,导致被批处理当作参数进行了替换,进而导致突破URL被替换错了,导致无法下载。
作者: honghunter     时间: 2007-5-4 09:47
贴出俺那个小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 ]
作者: honghunter     时间: 2007-5-4 09:49
下载链接:

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

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

[ Last edited by honghunter on 2007-5-3 at 09:08 PM ]
作者: chenall     时间: 2007-5-4 10:38
可以试试如下方法.
将生成的内容的前缀字符串去掉
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