一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - VBS - 支持斷點下載的VBS代碼

支持斷點下載的VBS代碼

2020-08-10 10:54VBS代碼網 VBS

VBS真是妙用無窮。會的程序語言不用太多,也不用太復雜,精通一門就好

之前我就介紹過VBScript語言的強大。今天再給出一個支持斷點下載的VBS代碼。
并附上VBS代碼的解析,不懂的朋友可以配合微軟的SCRIPT56.CHM文檔自學。很簡單,
VBS的好處就是代碼易于理解?;旧厦啃写a執行功能都用英文表示出來了。
這個代碼也是對我以前介紹的VBS下載功能的補充。
老規矩,復制保存為dl.vbe。
不過這個VBS的代碼的不同之處不是雙擊運行,而是在CMD命令行下執行。

下載功能執行的格式是: cscript.exe dl.vbs (目標文件地址)

[以下載MetaSploit的WIn32版本為例。在CMD中輸入:cscript.exe dl.vbs http://spool.metasploit.com/releases/framework-3.2.exe]

36.7M的文件下載用了7分多鐘,而迅雷用了1分50秒。

代碼如下:

復制代碼 代碼如下:


if (lcase(right(wscript.fullname,11))="wscript.exe") then'判斷腳本宿主的名稱'
die("Script host must be CScript.exe.") '腳本宿主不是CScript,于是就die了'
end if

if wscript.arguments.count<1 then'至少要有一個參數'
die("Usage: cscript webdl.vbs url [filename]") '麻雀雖小五臟俱全,Usage不能忘'
end if

url=wscript.arguments(0) '參數數組下標從0開始'
if url="" then die("URL can't be null.") '敢唬我,空url可不行'
if wscript.arguments.count>1 then'先判斷參數個數是否大于1'
filename=wscript.arguments(1) '再訪問第二個參數'
else '如果沒有給出文件名,就從url中獲得'
t=instrrev(url,"/") '獲得最后一個"/"的位置'
if t=0 or t=len(url) then die("Can not get filename to save.") '沒有"/"或以"/"結尾'
filename=right(url,len(url)-t)'獲得要保存的文件名'
end if
if not left(url,7)="http://" then url="http://"&url'如果粗心把“http://”忘了,加上'

set fso=wscript.createobject("Scripting.FileSystemObject") 'FSO,ASO,HTTP三個對象一個都不能少'
set aso=wscript.createobject("ADODB.Stream")
set http=wscript.createobject("Microsoft.XMLHTTP")

if fso.fileexists(filename) then '判斷要下載的文件是否已經存在'
start=fso.getfile(filename).size '存在,以當前文件大小作為開始位置'
else
start=0 '不存在,一切從零開始'
fso.createtextfile(filename).close '新建文件'
end if

wscript.stdout.write "Connectting..." '好戲剛剛開始'
current=start '當前位置即開始位置'
do
http.open "GET",url,true'這里用異步方式調用HTTP'
http.setrequestheader "Range","bytes="&start&"-"&cstr(start+20480) '斷點續傳的奧秘就在這里'
http.setrequestheader "Content-Type:","application/octet-stream"
http.send '構造完數據包就開始發送'

for i=1 to 120 '循環等待'
if http.readystate=3 then showplan() '狀態3表示開始接收數據,顯示進度'
if http.readystate=4 then exit for '狀態4表示數據接受完成'
wscript.sleep 500 '等待500ms'
next
if not http.readystate=4 then die("Timeout.") '1分鐘還沒下完20k?超時!'
if http.status>299 then die("Error: "&http.status&" "&http.statustext) '不是吧,又出錯?'
if not http.status=206 then die("Server Not Support Partial Content.") '服務器不支持斷點續傳'

aso.type=1 '數據流類型設為字節'
aso.open
aso.loadfromfile filename '打開文件'
aso.position=start'設置文件指針初始位置'
aso.write http.responsebody '寫入數據'
aso.savetofile filename,2 '覆蓋保存'
aso.close

range=http.getresponseheader("Content-Range") '獲得http頭中的"Content-Range"'
if range="" then die("Can not get range.")'沒有它就不知道下載完了沒有'
temp=mid(range,instr(range,"-")+1) 'Content-Range是類似123-456/789的樣子'
current=clng(left(temp,instr(temp,"/")-1))'123是開始位置,456是結束位置'
total=clng(mid(temp,instr(temp,"/")+1)) '789是文件總字節數'
if total-current=1 then exit do '結束位置比總大小少1就表示傳輸完成了'
start=start+20480 '否則再下載20k'
loop while true

wscript.echo chr(13)&"Download ("&total&") Done." '下載完了,顯示總字節數'

function die(msg) '函數名來自Perl內置函數die'
wscript.echo msg '交代遺言^_^'
wscript.quit '去見馬克思了'
end function

function showplan() '顯示下載進度'
if i mod 3 = 0 then c="/" '簡單的動態效果'
if i mod 3 = 1 then c="-"
if i mod 3 = 2 then c="\"
wscript.stdout.write chr(13)&"Download ("&current&") "&c&chr(8)'13號ASCII碼是回到行首,8號是退格'
end function



以上就是完整的用VBS寫的支持斷點的下載代碼,非常適合公司禁止用XunLei、Flashget的情況。只是速度是個問題。需要完善到多線程下載。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 麻豆网站视频国产在线观看 | 欧美成人福利视频 | 日韩在线观看免费 | 国产视频播放 | 岛国片免费看 | 欧美成人精品福利在线视频 | h版欧美大片免费观看 | 国产综合成人久久大片91 | 高清在线看 | 高清一级做a爱免费视 | 亚洲欧美日韩在线观看看另类 | 蜜桃视频在线观看官网 | 刺激一区仑乱 | 久久99re2在线视频精品 | 精品推荐国产麻豆剧传媒 | 金发美女与黑人做爰 | 久久er国产精品免费观看2 | 久久视频精品3线视频在线观看 | 青青操在线播放 | 青青草原国产视频 | 亚洲国产欧美在线人成aaaa20 | poren黑人| 亚洲春色综合另类网蜜桃 | 亚洲精品一区二区三区在线观看 | 亚洲精品国产成人 | 亚洲国产精品综合久久网络 | 男人午夜禁片在线观看 | 熟睡迷j系列小说 | 丝瓜视频黄色在线观看 | 邪恶肉肉全彩色无遮琉璃神社 | 国产精品一区久久精品 | 美女脱了内裤让男生玩屁股 | futa巨大好爽好长 | 亚洲国产欧美日韩在线一区 | 全肉一女n男np高h乳 | 亚洲黄色色图 | 手机跑分排行最新排名 | 91寡妇天天综合久久影院 | 2021精品国夜夜天天拍拍 | 日本不卡一区二区三区在线观看 | 1024国产精品视频观看 |