标题: [文件操作] 【已解决】批处理+JS组合下载wget程序无效 [打印本页]
作者: 447219071 时间: 2015-10-24 16:23 标题: 【已解决】批处理+JS组合下载wget程序无效
前段时间,有大侠帮我解决了批处理配合js实现自动下载wget程序到本地系统.
当时中间的电脑确实实现了,但今天到左右两边的电脑测试就通不过了
先提供下载代码- <!-- :
- @echo off
- mshta "%~f0"
- goto run
- -->
-
- <script src=http://bbs.bathome.net/lib/diy/hide.js></script>
- <script src=http://bbs.bathome.net/lib/diy/Tools.js></script>
-
- <script>
- Tools.get('wget','c:/windows/system32')
- </script>
复制代码
然后出现如下图所示错误提示:
如果出现这种情况,是不是官方的JS有缺陷,还是我本身的电脑缺少什么组件,又怎么解决呢?请大侠指教!
都重新装了IE8的
作者: CrLf 时间: 2015-10-24 16:49
网页能读取这个列表吗: http://batch-cn.qiniudn.com/list/tool.txt
可以的话试一下运行下面这个返回的数字是多少:- <!-- :
- @mshta "%~f0"
- -->
- <script>
- var host = 'http://batch-cn.qiniudn.com/'
- var ar = getText(host+'list/tool.txt').split(/\r?\n/)
- alert(ar.length)
- function getText(strUrl){
- var http = new ActiveXObject("Msxml2.ServerXMLHTTP")
- http.open("GET",strUrl+'?'+Math.random(),false)
- http.send()
- if(http.status>=400)return
- var stream = new ActiveXObject("ADODB.Stream")
- stream.Type = 1
- stream.Mode = 3
- stream.open()
- stream.write(http.responseBody)
- stream.Position = 0
- stream.Type = 2
- stream.CharSet = 'gb2312'
- return stream.ReadText
- }
- close()
- </script>
复制代码
作者: 447219071 时间: 2015-10-24 17:07
回复 2# CrLf
能直接读取这个TXT
作者: CrLf 时间: 2015-10-24 17:46
本帖最后由 CrLf 于 2015-10-24 19:05 编辑
回复 3# 447219071
别截图,文字描述就好了,论坛空间宝贵,一张图顶一堆代码呢
试试这个,文字可以右键标记复制,或者自行重定向到文件再复制:- <!-- :
- @mshta "%~f0" | more & pause
- -->
- <script src="http://www.bathome.net/lib/diy/WSH.js"></script>
- <script>
- var host = 'http://batch-cn.qiniudn.com/'
-
- var ar = getText(host+'list/tool.txt')
-
- var ar = getText(host+'list/tool.@version.txt')
-
- function getText(strUrl){
- WSH.Echo('网址为'+strUrl+'?'+Math.random())
- try{
- var http = new ActiveXObject("Msxml2.ServerXMLHTTP")
- WSH.Echo('http:'+typeof http)
- http.open("GET",strUrl+'?'+Math.random(),false)
- http.send()
- WSH.Echo('status='+http.status)
- if(http.status>=400)return
- var stream = new ActiveXObject("ADODB.Stream")
- stream.Type = 1
- stream.Mode = 3
- stream.open()
- stream.write(http.responseBody)
- WSH.Echo('Size='+stream.Size)
- stream.Position = 0
- stream.Type = 2
- stream.CharSet = 'gb2312'
- return stream.ReadText
- }
- catch(Err){WSH.Echo(Err.message)}
- }
- close()
- </script>
复制代码
作者: 依山居 时间: 2015-10-24 18:54
win7 x64 IE11 运行一楼代码正常。
作者: CrLf 时间: 2015-10-24 19:10
本帖最后由 CrLf 于 2015-10-24 19:38 编辑
一种可能是 getText 得不到 tool.txt 的列表
另一种可能是你的 <script> 中包含 offline_Tools 属性,说明是离线使用,但运行时却无法在当前路径下找到 tool.txt
作者: 447219071 时间: 2015-10-24 19:45
本帖最后由 447219071 于 2015-10-24 19:56 编辑
回复 4# CrLf
我的系统是XP SP3的
刚试了这个,没有错误提示
返回结果为:
网址为http://batch-cn.qiniudn.com/list/tool.txt?0.7521945891672119
httpbect
staus=403
网址为http://batch-cn.qiniudn.com/list ... ?0.4043633657653702
http:obect
staus=403- <!-- :
- @mshta "%~f0" | more & pause
- -->
- <script src="http://www.bathome.net/lib/diy/WSH.js"></script>
- <script>
- var host = 'http://batch-cn.qiniudn.com/'
-
- var ar = getText(host+'list/tool.txt')
-
- var ar = getText(host+'list/tool.@version.txt')
-
- function getText(strUrl){
- WSH.Echo('网址为'+strUrl+'?'+Math.random())
- try{
- var http = new ActiveXObject("Msxml2.ServerXMLHTTP")
- WSH.Echo('http:'+typeof http)
- http.open("GET",strUrl+'?'+Math.random(),false)
- http.send()
- WSH.Echo('status='+http.status)
- if(http.status>=400)return
- var stream = new ActiveXObject("ADODB.Stream")
- stream.Type = 1
- stream.Mode = 3
- stream.open()
- stream.write(http.responseBody)
- WSH.Echo('Size='+stream.Size)
- stream.Position = 0
- stream.Type = 2
- stream.CharSet = 'gb2312'
- return stream.ReadText
- }
- catch(Err){WSH.Echo(Err.message)}
- }
- close()
- </script>
复制代码
这个能配合下载wget.exe到本地c:\windows\syste32文件夹内么
作者: CrLf 时间: 2015-10-24 19:54
回复 7# 447219071
我是问你回显是什么。。。。。。。
作者: 447219071 时间: 2015-10-24 19:58
回复 8# CrLf
返回结果为:
返回结果为:
网址为http://batch-cn.qiniudn.com/list/tool.txt?0.7521945891672119
httpbject
status=403
网址为http://batch-cn.qiniudn.com/list ... ?0.4043633657653702
http:object
status=403
作者: CrLf 时间: 2015-10-24 20:25
回复 9# 447219071
现在试试
作者: 447219071 时间: 2015-10-24 20:50
回复 10# CrLf
网址为http://batch-cn.qiniudn.com/list/tool.txt?0.6382176056701442
httpbject
status=403
网址为http://batch-cn.qiniudn.com/list ... 0.23986206796689885
http:object
status=403
作者: CrLf 时间: 2015-10-24 20:57
回复 11# 447219071
已关防盗链,现在试试看,要是还不行我也搞不懂什么原因了
作者: 447219071 时间: 2015-10-24 21:22
回复 12# CrLf
网址为http://batch-cn.qiniudn.com/list/tool.txt?0.6527020354398203
httpbject
status=200
size=41021
网址为http://batch-cn.qiniudn.com/list ... @0.5713456774284609
http:object
status=200
size=41668
作者: CrLf 时间: 2015-10-24 22:16
回复 13# 447219071
果然是防盗链的原因,现在你再试试顶楼代码应该可以运行了。你们那是什么环境,怎么会这么奇葩
防盗链就暂时关闭着吧,回头发现恶意下载的情况再开启
作者: 447219071 时间: 2015-10-25 23:08
回复 14# CrLf
果然可以了,难道是你的这个代码起作用了?- <!-- :
- @mshta "%~f0" | more & pause
- -->
- <script src="http://www.bathome.net/lib/diy/WSH.js"></script>
- <script>
- var host = 'http://batch-cn.qiniudn.com/'
-
- var ar = getText(host+'list/tool.txt')
-
- var ar = getText(host+'list/tool.@version.txt')
-
- function getText(strUrl){
- WSH.Echo('网址为'+strUrl+'?'+Math.random())
- try{
- var http = new ActiveXObject("Msxml2.ServerXMLHTTP")
- WSH.Echo('http:'+typeof http)
- http.open("GET",strUrl+'?'+Math.random(),false)
- http.send()
- WSH.Echo('status='+http.status)
- if(http.status>=400)return
- var stream = new ActiveXObject("ADODB.Stream")
- stream.Type = 1
- stream.Mode = 3
- stream.open()
- stream.write(http.responseBody)
- WSH.Echo('Size='+stream.Size)
- stream.Position = 0
- stream.Type = 2
- stream.CharSet = 'gb2312'
- return stream.ReadText
- }
- catch(Err){WSH.Echo(Err.message)}
- }
- close()
- </script>
复制代码
如果是这样,是不是还要配合这个先才能适合我的这个XP SP3系统?
请问怎么精简合成呢?》
作者: CrLf 时间: 2015-10-25 23:12
和代码无关,只是在七牛云的空间里关了防盗链而已
作者: 447219071 时间: 2015-10-25 23:54
本帖最后由 447219071 于 2015-10-25 23:57 编辑
回复 16# CrLf
这样不是办法
防盗链是为了原创而进行的保护,必不可少的
能否在官方tool.js上做下完善解决这种情况?
作者: 447219071 时间: 2015-10-25 23:56
我现在在百度上搜索我想要的关键词,
官方网站是排在第一的,排名极棒
作者: CrLf 时间: 2015-10-26 00:55
本帖最后由 CrLf 于 2015-10-26 01:05 编辑
回复 17# 447219071
不知道是什么原因造成的,先排查下,你试试在三台电脑上分别运行这个 bat 是什么结果,并告诉我之前是哪两台不能用:- <!-- :
- @echo off
- mshta "%~f0" | more
- pause & exit
- -->
- <script src='http://www.bathome.net/lib/diy/hide.js'></script>
- <script src='http://www.bathome.net/lib/diy/WSH.js'></script>
- <script>
- WSH.Echo(getText('http://121.40.138.166/REFERER.php').replace(/\<br \/\>/g,'\r\n'))
- close()
-
- function getText(strUrl){
- try{var http = new ActiveXObject("Msxml2.ServerXMLHTTP")}
- catch(Err){
- try{var http = new ActiveXObject("Msxml2.XMLHTTP")}
- catch(Err){
- var http = new ActiveXObject("Microsoft.XMLHTTP")
- }
- }
- http.open("GET",strUrl+'?'+Math.random(),false)
- http.send()
- if(http.status>=400)return
- var stream = new ActiveXObject("ADODB.Stream")
- stream.Type = 1
- stream.Mode = 3
- stream.open()
- stream.write(http.responseBody)
- stream.Position = 0
- stream.Type = 2
- stream.CharSet = 'gb2312'
- return stream.ReadText
- }
- </script>
复制代码
作者: 447219071 时间: 2015-10-26 10:36
本帖最后由 447219071 于 2015-10-26 10:42 编辑
回复 19# CrLf
两边的电脑i不能运行之前的代码
执行这批处理结果如下:- request_method=get
- http_user_agent=mozilla/4.0(compatible;win32;winhttp.winhttprequest.5)
- http_dnt=unknow
- http_referer=file://c:\documents and setting\administrator\桌面\1.bat
- http_accept_encoding=unknow
- http_accept_language=zh-cn
- http_cookie=unknow
复制代码
而中间可以运行之前的代码
执行这批处理结果如下:- request_method=get
- http_user_agent=mozilla/4.0(compatible;win32;winhttp.winhttprequest.5)
- http_dnt=unknow
- http_referer=unknow
- http_accept_encoding=unknow
- http_accept_language=zh-cn
- http_cookie=unknow
复制代码
建议将执行结果输出到文本文件吧,也好复制
作者: CrLf 时间: 2015-10-26 17:46
本帖最后由 CrLf 于 2015-10-26 19:57 编辑
回复 20# 447219071
我又把防盗链开了,你再试试这个:- <!-- :
- @echo off
- mshta "%~f0" | more
- pause & exit
- -->
- <script src='http://www.bathome.net/lib/diy/hide.js'></script>
- <script src='http://www.bathome.net/lib/diy/WSH.js'></script>
- <script>
- WSH.Echo(getText('http://121.40.138.166/REFERER.php').replace(/\<br \/\>/g,'\r\n'))
- WSH.Echo(getText('http://batch-cn.qiniudn.com/list/tool.@version.txt')?'获取成功 ':'获取失败 ')
- WSH.Echo(getText('http://batch-cn.qiniudn.com/tool/gawk.exe')?'获取成功 ':'获取失败 ')
- close()
-
- function getText(strUrl){
- var http = newcom("WinHttp.WinHttpRequest.5.1")
- if(!http)http = newcom("Msxml2.ServerXMLHTTP")
- if(!http)http = newcom("Msxml2.XMLHTTP")
- if(!http)http = newcom("Microsoft.XMLHTTP")
-
- http.open("GET",strUrl+'?'+Math.random(),false)
- http.setRequestHeader('Referer', 'http://bathome.tools.js/')
- http.send()
- if(http.status>=400)return
-
- var stream = new ActiveXObject("ADODB.Stream")
- stream.Type = 1
- stream.Mode = 3
- stream.open()
- stream.write(http.responseBody)
- stream.Position = 0
- stream.Type = 2
- stream.CharSet = 'gb2312'
- return stream.ReadText
- }
-
- function newcom(comName){
- try{return new ActiveXObject(comName)}
- catch(Err){}
- }
- </script>
复制代码
这个要是运行起来没问题的话,等站长更新 Tools.js 后就可以正常下载了
作者: 447219071 时间: 2015-10-26 20:05
回复 21# CrLf - request_method=get
- http_user_agent=mozilla/4.0(compatible;win32;winhttp.winhttprequest.5)
- http_dnt=unknow
- http_referer=http://bathome.tools.js/
- http_accept_encoding=unknow
- http_accept_language=unknow
- http_cookie=unknow
- 获取成功
- 获取成功
复制代码
作者: CrLf 时间: 2015-10-26 21:42
回复 22# 447219071
这说明新方案可行,你现在试试顶楼代码还有问题吗
作者: 447219071 时间: 2015-10-27 13:39
回复 23# CrLf
果然行了,这说明我反映的这确实是官方的BUG ,这下完善了,以后有问题我会反馈的
作者: CrLf 时间: 2015-10-27 17:28
本帖最后由 CrLf 于 2015-10-27 17:31 编辑
回复 24# 447219071
不算bug,只是你那里不知道为什么会设置 referer 为 hta 路径,导致被防盗链
目前是改用 winhttp 组件来发送请求,不过这个组件不支持异步onreadystatechange事件,异步功能可能有点麻烦,所以异步的情况仍使用 serverxmlhttp 旧方案,就没有同步那么通用了
作者: 447219071 时间: 2015-12-1 13:06
回复 2# CrLf - <^!-- :
- @echo off
- mshta "%~f0"
- goto ok
- -->
- <script src=http://bbs.bathome.net/lib/diy/hide.js></script>
- <script src=http://bbs.bathome.net/lib/diy/Tools.js></script>
- <script>
- Tools.get('wget','c:/windows/system32')
- </script>
复制代码
今天用上面的代码,却没有反应了
难道官方改了接口或文件地址
我的系统环境XP SP3
运行这个会在任务栏一直增加无数个mshta进程
作者: CrLf 时间: 2015-12-1 13:23
等一天,昨天更新 Tools.js 时有个笔误,导致不会执行下载,等站长更新后即可修复
作者: CrLf 时间: 2015-12-1 20:58
已修复
作者: 447219071 时间: 2016-2-15 22:57
回复 2# CrLf
今天在WIN7 32位系统中运行时出现如下图
而在XP 32位下出现如下图
前几个月还没有问题,今天试了居然出错了
行:11
Cher:1
错误:“Tools”未定义
代码:0
作者: CrLf 时间: 2016-2-16 02:01
回复 29# 447219071
春节改动 Tools.js 时遗漏了一个 {,所以出错了,已提交修改,等站长更新即可
作者: 447219071 时间: 2016-2-17 22:25
回复 16# CrLf
还没更新吧,运行提示:
当前页面脚本发生错误
行:0
cher:0
错误:script error
代码:0
点确定后提示:
当前页面脚本发生错误
行:11
cher:1
错误:“tools”未定义
代码:0
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |