迅雷的批量下載滿好用。但是有兩點我不太中意。在這個腳本里會有所增強
1、不能設置保存的文件名。
2、不能單獨設置這批下載的線程限制。
使用方法
// 下載從編號001到編號020的圖片,保存名為貓咪寫真*.jpg 使用6個線程
jdlp http://bizhi.zhuoku.com/bizhi/200804/0422/cat/cat{*}.jpg d:\草原上的可愛貓咪\ 貓咪寫真{*}.jpg 20 1 3 6
腳本備份


var rslt = [];
var urlPattern = arguments[0].replaceAll("(http|https)://", "");
var targetDir = arguments[1] || "d:\\";
var filenamePattern = arguments[2] || "圖片";
var endIndx = arguments[3];
var startIndx = arguments[4];
var numlen = arguments[5];
var threadnum = arguments[6];
var service = java.util.concurrent.Executors.newFixedThreadPool(threadnum);
mkdir(targetDir);
function downloadTask(indx) {
var url = "http://" + urlPattern.replace("{*}", indx.toString());
var file = targetDir + filenamePattern.replace("{*}", indx.toString());
return function() {
// 生成一個url 生成目標文件
try {
println("downloading : " + url);
cp(url, file);
println("downloaded : " + url);
} catch(e) {
println("download error : " + url);
println("reasion :" + e);
}
}
}
function fillStr(str, c) {
var sb = new java.lang.StringBuilder(str.toString());
var len = sb.length();
if (len > numlen) {
return sb.toString().substring(0, len);
} else {
for (var cnt = 1; cnt <= (numlen - len); cnt++)
sb.insert(0, c);
return sb.toString();
}
}
function checkAllDone() {
for each(var futur in rslt) {
if (future.isDone() == false) return false;
}
return true;
}
for (var i = startIndx; i <= endIndx; i++) {
var indx = fillStr(i, '0');
var future = service.submit(new java.lang.Thread(downloadTask(indx)));
rslt.push(future);
}
service.shutdown();
// 等待結束
while (checkAllDone() == false) {
java.lang.Thread.sleep(1000);
}
println("~~~~over~~~");