资源描述:
《记用bat(批处理脚本)实现文件下载功能》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、记用BAT(批处理脚本)实现文件下载功能[组图]记用BAT(批处理脚本)实现文件下载功能热荐【字体:小大】闲来无事之--记用BAT(批处理脚本)实现文件下载功能作者:ZV(ZVROP…文章来源:s8s8.net点击数:4864更新时间:2004-8-19作者:ZV(ZVROP)邮件:zvrop@163.com主页:(被整顿掉老~~~~~>_<~~~~~~)网站:http://www.s8s8.net日期:2004-8-18转载请保全文档完整,谢谢写的仓卒繁多,错漏难免,还请各位给予斧正.有什么问题,可以给我发email.^_^...目录:一.写在前面的话二.故事的起因三.解决
2、-腹稿四.解决-实战五.解决-打造六.包装七.小节八.后记九,参考文献正文开始:一.写在前面的话这篇文档讲述的并不是什么新鲜的技术,我只是起到将他们混和起来实现了自己需要的功能的作用,如果你对批处理和PE格式相当了解,那我的这篇文档就权且当作浏览温习吧...^_^...另外,由于我本人废话比较多,这也是不想给杂志写稿子的主要原因,给我干瘪瘪的3000字能讲出什么来,不如这样没有限制的爽快(当然也没什么报酬...一_一..),所以也为了防止你在看文章的途中睡着,请自备小锥子一把.....最后,这篇文档说是用批处理下载文件,其实它包含了很多方面的知识,如果有时间,不妨一看哈,^_
3、^,开始买瓜了..二.故事的起因最初萌发这个想法的是不久前,在论坛(广告一下:http://www.s8s8.net)上的UNIXSHELL板块有个会员发了一篇帖子,内容是用BASHSHELL写的一个成批下载图片的脚本(其实是H图片...一_一..),接下来跟贴那个多啊...,有繁衍出PHP的,VBS的,C的,C#的,JAVA的,甚至交流到多线程,断点续传....引用花大哥的一句话"无语,为了MM照片,大家的动力都很足啊!"...汗~~..在发了一份PHP和C的代码后(感觉我动力特足~大色狼...一_一..),觉得很简单(因为用C或者PHP等脚本来实现文件的下载本来就是很基础
4、的东西)我就开始想用微软最原始的脚本--Batch(批处理)来尝试实现(本文标题中的"闲来无事"就是纪念此处,一_一.),这似乎有点不可思议,因为批处理几乎没有实现的支持网络的功能(当然,如果你说你能用TELNET下载到文件的我是很佩服的..一_一..),但也不是完全没有办法,毕竟WINDOWS里面能用的东西这么多,没有完不成的事情....在这种挑战的勾引下,我完成了用批处理下载文件的功能....现在让我一步一步回放我的思路,揭开用批处理下载文件的奥秘...三.解决-腹稿如果用批处理来下载文件的话,肯定会马上想到Cscript脚本(或者是JAVA脚本),那是当然,太多的批处理
5、脚本实现一些本身并不可能实现的功能的时候都是采用ECHO出一个其他脚本的方法来解决.可是我们的目的就在于用批处理实现下载的功能,如果要用VBS来帮忙的话不如直接写VBS了.这个想法顺即告吹....再来,记得以前有流行过一阵用RUNDLL32来加载DLL中的API,似乎和我们需要的目的沾边,因为下载文件能用的API太多了,如果RUNDLL能调用,那最好不过了.于是我打开MSDN,找了一个API:URLDownloadToFileURLDownloadToFile函数原型:代码HRESULTURLDownloadToFile(LPUNKNOWNpCaller,LPCTSTRszU
6、RL,LPCTSTRszFileName,DWORDdwReserved,LPBINDSTATUSCALLBACKlpfnCB);URLDownloadToFile函数的一些信息:引用HeaderUrlmon.hImportlibraryUrlmon.libMinimumavailabilityInternetExplorer3.0MinimumoperatingsystemsWindowsNT4.0,Windows95根据这些,我们可以知道,这个API是在URLMON.DLL文件中的一个导出函数,简单的实现了把一个文件从WEB服务器下载本机的功能,其实用这个函数还不错的,至
7、少它帮我们处理了断点续传,缓存等等的功能,比起直接使用SOCKET函数来实现或者用WININET里的函数来实现简单多得多了.URLDownloadToFile有五个参数:第一个参数是仅当调用者是一个ActiveX对象才使用,一般为NULL.第二个参数就是要下载文件的目标URL,完整路径.第三个是本地保存路径,也是完整路径第四个是保留,必须为0第五个是指向一个IBindStatusCallback接口的指针,这就类似一种回调机制,你可以参考这些来活动当前下载进度,选择是否继续下载等等.这里面我们只关心第二