Skip to content

Commit

Permalink
fixes 获取7z错误
Browse files Browse the repository at this point in the history
  • Loading branch information
bajins committed Nov 25, 2019
1 parent be98145 commit 0ce3c5e
Showing 1 changed file with 200 additions and 25 deletions.
225 changes: 200 additions & 25 deletions 7z_pack.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
1>1/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1>1/* ::
:: by bajins https://www.bajins.com

@echo off
Expand All @@ -11,14 +11,13 @@ if not exist "%~dp0$testAdmin$" (
:: 开启延迟环境变量扩展
setlocal enabledelayedexpansion

:: 执行7z命令,但是不输出,这是为了判断
7za > nul
:: 如果7z压缩命令行不存在,则下载
:: %~f0 表示当前批处理的绝对路径,去掉引号的完整路径
cscript -nologo -e:jscript "%~f0" get7z
if not "%errorlevel%" == "0" (
:: cscript -nologo -e:jscript "%~f0" 这一段是执行命令,后面的是参数(组成方式:/key:value)
:: %~f0 表示当前批处理的绝对路径,去掉引号的完整路径
cscript -nologo -e:jscript "%~f0" https://github.com/woytu/woytu.github.io/releases/download/v1.0/7za.exe C:\Windows
@cmd /k
goto :EXIT
)

:: 需要打包的文件或文件夹根目录
set root=%~dp0
:: 需要打包的文件或文件夹
Expand All @@ -33,9 +32,11 @@ for %%a in (%currentPath%) do set CurrentDirectoryName=%%a
:: 打包完成的文件命名前一部分
set project=%CurrentDirectoryName%
:: 打包完成的文件命名后一部分,与前一部分进行组合
set allList=_darwin_386,_darwin_amd64,_freebsd_386,_freebsd_amd64,_freebsd_arm,_netbsd_386,_netbsd_amd64,_netbsd_arm,
set allList=%allList%_openbsd_386,_openbsd_amd64,_windows_386.exe,_windows_amd64.exe,
set allList=%allList%_linux_386,_linux_amd64,_linux_arm,_linux_mips,_linux_mips64,_linux_mips64le,_linux_mipsle,_linux_s390x
set allList=_darwin_386,_darwin_amd64,_freebsd_386,_freebsd_amd64,_freebsd_arm,
set allList=%allList%_netbsd_386,_netbsd_amd64,_netbsd_arm,_openbsd_386,
set allList=%allList%_openbsd_amd64,_windows_386.exe,_windows_amd64.exe,
set allList=%allList%_linux_386,_linux_amd64,_linux_arm,_linux_mips,
set allList=%allList%_linux_mips64,_linux_mips64le,_linux_mipsle,_linux_s390x

:GETGOX
set GOPROXY=https://goproxy.io
Expand All @@ -57,7 +58,7 @@ for %%i in (%allList%) do (
:: 使用7z压缩
for %%i in (%allList%) do (
set runFile=%project%%%i
:: !!和%%都是取变量的值,用这种方法的批处理文件前面一般有setlocal EnableDelayedExpansion(延迟环境变量扩展)语句
:: !!为setlocal EnableDelayedExpansion取变量的值
if exist "!runFile!" (
:: 判断变量字符串中是否包含字符串
echo %%i | findstr linux >nul && (
Expand Down Expand Up @@ -89,17 +90,191 @@ endlocal&exit /b %errorlevel%
// **************************** JavaScript *******************************


var iRemote = WScript.Arguments(0);
iRemote = iRemote.toLowerCase();
var iLocal = WScript.Arguments(1);
iLocal = iLocal.toLowerCase()+"\\"+ iRemote.substring(iRemote.lastIndexOf("/") + 1);
var xPost = new ActiveXObject("Microsoft.XMLHTTP");
xPost.Open("GET", iRemote, 0);
xPost.Send();
var sGet = new ActiveXObject("ADODB.Stream");
sGet.Mode = 3;
sGet.Type = 1;
sGet.Open();
sGet.Write(xPost.responseBody);
sGet.SaveToFile(iLocal, 2);
sGet.Close();
var Argv = WScript.Arguments;
for (i = 0; i < Argv.length; i++) {
WScript.StdOut.WriteLine("参数:" + Argv(i));
}

if (Argv.length > 0) {
switch (Argv(0)) {
case "get7z":
try{
get7z();
}catch(e){
WScript.StdErr.WriteLine(e.message);
// 非正常退出
WScript.Quit(1);
}
break;
default:
help();
}
// 正常退出
WScript.Quit(0);
}


/**
* HTTP请求
*
* @param method GET,POST
* @param url 请求地址
* @param dataType "",text,stream,xml,json
* @param data 数据,{key:value}格式
* @param contentType 发送的数据类型:multipart/form-data、
* application/x-www-form-urlencoded(默认)、text/plain
* @returns {string|Document|any}
*/
function request(method, url, dataType, data, contentType) {
if (url == "" || url == null || url.length <= 0) {
throw new Error("请求url不能为空!");
}
if (method == "" || method == null || method.length <= 0) {
method = "GET";
} else {
// 把字符串转换为大写
method = method.toUpperCase();
}
if (contentType == "" || contentType == null || contentType.length <= 0) {
contentType = "application/x-www-form-unlenconded;charset=utf-8";
}
var XMLHTTPVersions = [
'WinHttp.WinHttpRequest.5.1',
'WinHttp.WinHttpRequest.5.0',
'Msxml2.ServerXMLHTTP.6.0',
'Msxml2.ServerXMLHTTP.5.0',
'Msxml2.ServerXMLHTTP.4.0',
'Msxml2.ServerXMLHTTP.3.0',
'Msxml2.ServerXMLHTTP',
'MSXML2.XMLHTTP.6.0',
'MSXML2.XMLHTTP.5.0',
'MSXML2.XMLHTTP.4.0',
'MSXML2.XMLHTTP.3.0',
'MSXML2.XMLHTTP',
'Microsoft.XMLHTTP'
];
var XMLHTTP;
for (var i = 0; i < XMLHTTPVersions.length; i++) {
try {
XMLHTTP = new ActiveXObject(XMLHTTPVersions[i]);
break;
} catch (e) {
WScript.StdOut.Write(XMLHTTPVersions[i]);
WScript.StdOut.WriteLine("" + e.message);
}
}

//将对象转化成为querystring形式
var paramarray = [];
for (key in data) {
paramarray.push(key + "=" + data[key]);
}
var params = paramarray.join("&");

switch (method) {
case "POST":
// 0异步、1同步
XMLHTTP.Open(method, url, 0);
XMLHTTP.SetRequestHeader("CONTENT-TYPE", contentType);
XMLHTTP.Send(params);
break;
default:
// 默认GET请求
if (params == "" || params.length == 0 || params == null) {
// 0异步、1同步
XMLHTTP.Open(method, url, 0);
} else {
XMLHTTP.Open(method, url + "?" + params, 0);
}
XMLHTTP.SetRequestHeader("CONTENT-TYPE", contentType);
XMLHTTP.Send();
}

// 把字符串转换为小写
dataType = dataType.toLowerCase();
switch (dataType) {
case "text":
return XMLHTTP.responseText;
break;
case "stream":
return XMLHTTP.responseStream;
break;
case "xml":
return XMLHTTP.responseXML;
break;
case "json":
return eval("(" + XMLHTTP.responseText + ")");
break;
default:
return XMLHTTP.responseBody;
}
}


/**
* 下载文件
*
* @param url
* @param directory 文件存储目录
* @param filename 文件名,为空默认截取url中的文件名
* @returns {string}
*/
function download(url, directory, filename) {
if (url == "" || url == null || url.length <= 0) {
throw new Error("请求url不能为空!");
}
if (directory == "" || directory == null || directory.length <= 0) {
throw new Error("文件存储目录不能为空!");
}

var fso = new ActiveXObject("Scripting.FileSystemObject");
// 如果目录不存在
if (!fso.FolderExists(directory)) {
// 创建目录
var strFolderName = fso.CreateFolder(directory);
}

if (filename == "" || filename == null || filename.length <= 0) {
filename = url.substring(url.lastIndexOf("/") + 1);
// 去掉文件名的特殊符号(包括之前的)字符
filename = filename.replace(/^.*(\&|\=|\?|\/)/ig, "");
}
var path = directory + "\\" + filename;

var ADO = new ActiveXObject("ADODB.Stream");
ADO.Mode = 3;
ADO.Type = 1;
ADO.Open();
ADO.Write(request("GET", url, ""));
ADO.SaveToFile(path, 2);
ADO.Close();

// 如果文件不存在
if (!fso.FileExists(path)) {
return "";
}
return path;
}

/**
* 获取7-Zip
*
*/
function get7z() {
var shell = new ActiveXObject("WScript.shell");
// 执行7z命令判断是否执行成功
var out = shell.Run("cmd /c 7za", 0, true);
var directory = "c:\\windows";
var url = "https://github.com/woytu/woytu.github.io/releases/download/v1.0/7za.exe";
// 如果执行失败说明7z不存在
if (out == 1) {
download(url, directory);
}
// 执行7z命令判断是否执行成功
out = shell.Run("cmd /c 7za", 0, true);
var fso = new ActiveXObject("Scripting.FileSystemObject");
// 如果执行失败,或者文件不存在
if (out == 1 || !fso.FileExists(directory + "\\7za.exe")) {
get7z();
}
}

0 comments on commit 0ce3c5e

Please sign in to comment.