Skip to content

Commit 0ce3c5e

Browse files
author
bajins
committed
fixes 获取7z错误
1 parent be98145 commit 0ce3c5e

File tree

1 file changed

+200
-25
lines changed

1 file changed

+200
-25
lines changed

7z_pack.bat

Lines changed: 200 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1>1/* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1+
1>1/* ::
22
:: by bajins https://www.bajins.com
33

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

14-
:: 执行7z命令,但是不输出,这是为了判断
15-
7za > nul
16-
:: 如果7z压缩命令行不存在,则下载
14+
:: %~f0 表示当前批处理的绝对路径,去掉引号的完整路径
15+
cscript -nologo -e:jscript "%~f0" get7z
1716
if not "%errorlevel%" == "0" (
18-
:: cscript -nologo -e:jscript "%~f0" 这一段是执行命令,后面的是参数(组成方式:/key:value)
19-
:: %~f0 表示当前批处理的绝对路径,去掉引号的完整路径
20-
cscript -nologo -e:jscript "%~f0" https://github.com/woytu/woytu.github.io/releases/download/v1.0/7za.exe C:\Windows
17+
@cmd /k
18+
goto :EXIT
2119
)
20+
2221
:: 需要打包的文件或文件夹根目录
2322
set root=%~dp0
2423
:: 需要打包的文件或文件夹
@@ -33,9 +32,11 @@ for %%a in (%currentPath%) do set CurrentDirectoryName=%%a
3332
:: 打包完成的文件命名前一部分
3433
set project=%CurrentDirectoryName%
3534
:: 打包完成的文件命名后一部分,与前一部分进行组合
36-
set allList=_darwin_386,_darwin_amd64,_freebsd_386,_freebsd_amd64,_freebsd_arm,_netbsd_386,_netbsd_amd64,_netbsd_arm,
37-
set allList=%allList%_openbsd_386,_openbsd_amd64,_windows_386.exe,_windows_amd64.exe,
38-
set allList=%allList%_linux_386,_linux_amd64,_linux_arm,_linux_mips,_linux_mips64,_linux_mips64le,_linux_mipsle,_linux_s390x
35+
set allList=_darwin_386,_darwin_amd64,_freebsd_386,_freebsd_amd64,_freebsd_arm,
36+
set allList=%allList%_netbsd_386,_netbsd_amd64,_netbsd_arm,_openbsd_386,
37+
set allList=%allList%_openbsd_amd64,_windows_386.exe,_windows_amd64.exe,
38+
set allList=%allList%_linux_386,_linux_amd64,_linux_arm,_linux_mips,
39+
set allList=%allList%_linux_mips64,_linux_mips64le,_linux_mipsle,_linux_s390x
3940

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

9192

92-
var iRemote = WScript.Arguments(0);
93-
iRemote = iRemote.toLowerCase();
94-
var iLocal = WScript.Arguments(1);
95-
iLocal = iLocal.toLowerCase()+"\\"+ iRemote.substring(iRemote.lastIndexOf("/") + 1);
96-
var xPost = new ActiveXObject("Microsoft.XMLHTTP");
97-
xPost.Open("GET", iRemote, 0);
98-
xPost.Send();
99-
var sGet = new ActiveXObject("ADODB.Stream");
100-
sGet.Mode = 3;
101-
sGet.Type = 1;
102-
sGet.Open();
103-
sGet.Write(xPost.responseBody);
104-
sGet.SaveToFile(iLocal, 2);
105-
sGet.Close();
93+
var Argv = WScript.Arguments;
94+
for (i = 0; i < Argv.length; i++) {
95+
WScript.StdOut.WriteLine("参数:" + Argv(i));
96+
}
97+
98+
if (Argv.length > 0) {
99+
switch (Argv(0)) {
100+
case "get7z":
101+
try{
102+
get7z();
103+
}catch(e){
104+
WScript.StdErr.WriteLine(e.message);
105+
// 非正常退出
106+
WScript.Quit(1);
107+
}
108+
break;
109+
default:
110+
help();
111+
}
112+
// 正常退出
113+
WScript.Quit(0);
114+
}
115+
116+
117+
/**
118+
* HTTP请求
119+
*
120+
* @param method GET,POST
121+
* @param url 请求地址
122+
* @param dataType "",text,stream,xml,json
123+
* @param data 数据,{key:value}格式
124+
* @param contentType 发送的数据类型:multipart/form-data、
125+
* application/x-www-form-urlencoded(默认)、text/plain
126+
* @returns {string|Document|any}
127+
*/
128+
function request(method, url, dataType, data, contentType) {
129+
if (url == "" || url == null || url.length <= 0) {
130+
throw new Error("请求url不能为空!");
131+
}
132+
if (method == "" || method == null || method.length <= 0) {
133+
method = "GET";
134+
} else {
135+
// 把字符串转换为大写
136+
method = method.toUpperCase();
137+
}
138+
if (contentType == "" || contentType == null || contentType.length <= 0) {
139+
contentType = "application/x-www-form-unlenconded;charset=utf-8";
140+
}
141+
var XMLHTTPVersions = [
142+
'WinHttp.WinHttpRequest.5.1',
143+
'WinHttp.WinHttpRequest.5.0',
144+
'Msxml2.ServerXMLHTTP.6.0',
145+
'Msxml2.ServerXMLHTTP.5.0',
146+
'Msxml2.ServerXMLHTTP.4.0',
147+
'Msxml2.ServerXMLHTTP.3.0',
148+
'Msxml2.ServerXMLHTTP',
149+
'MSXML2.XMLHTTP.6.0',
150+
'MSXML2.XMLHTTP.5.0',
151+
'MSXML2.XMLHTTP.4.0',
152+
'MSXML2.XMLHTTP.3.0',
153+
'MSXML2.XMLHTTP',
154+
'Microsoft.XMLHTTP'
155+
];
156+
var XMLHTTP;
157+
for (var i = 0; i < XMLHTTPVersions.length; i++) {
158+
try {
159+
XMLHTTP = new ActiveXObject(XMLHTTPVersions[i]);
160+
break;
161+
} catch (e) {
162+
WScript.StdOut.Write(XMLHTTPVersions[i]);
163+
WScript.StdOut.WriteLine("" + e.message);
164+
}
165+
}
166+
167+
//将对象转化成为querystring形式
168+
var paramarray = [];
169+
for (key in data) {
170+
paramarray.push(key + "=" + data[key]);
171+
}
172+
var params = paramarray.join("&");
173+
174+
switch (method) {
175+
case "POST":
176+
// 0异步、1同步
177+
XMLHTTP.Open(method, url, 0);
178+
XMLHTTP.SetRequestHeader("CONTENT-TYPE", contentType);
179+
XMLHTTP.Send(params);
180+
break;
181+
default:
182+
// 默认GET请求
183+
if (params == "" || params.length == 0 || params == null) {
184+
// 0异步、1同步
185+
XMLHTTP.Open(method, url, 0);
186+
} else {
187+
XMLHTTP.Open(method, url + "?" + params, 0);
188+
}
189+
XMLHTTP.SetRequestHeader("CONTENT-TYPE", contentType);
190+
XMLHTTP.Send();
191+
}
192+
193+
// 把字符串转换为小写
194+
dataType = dataType.toLowerCase();
195+
switch (dataType) {
196+
case "text":
197+
return XMLHTTP.responseText;
198+
break;
199+
case "stream":
200+
return XMLHTTP.responseStream;
201+
break;
202+
case "xml":
203+
return XMLHTTP.responseXML;
204+
break;
205+
case "json":
206+
return eval("(" + XMLHTTP.responseText + ")");
207+
break;
208+
default:
209+
return XMLHTTP.responseBody;
210+
}
211+
}
212+
213+
214+
/**
215+
* 下载文件
216+
*
217+
* @param url
218+
* @param directory 文件存储目录
219+
* @param filename 文件名,为空默认截取url中的文件名
220+
* @returns {string}
221+
*/
222+
function download(url, directory, filename) {
223+
if (url == "" || url == null || url.length <= 0) {
224+
throw new Error("请求url不能为空!");
225+
}
226+
if (directory == "" || directory == null || directory.length <= 0) {
227+
throw new Error("文件存储目录不能为空!");
228+
}
229+
230+
var fso = new ActiveXObject("Scripting.FileSystemObject");
231+
// 如果目录不存在
232+
if (!fso.FolderExists(directory)) {
233+
// 创建目录
234+
var strFolderName = fso.CreateFolder(directory);
235+
}
236+
237+
if (filename == "" || filename == null || filename.length <= 0) {
238+
filename = url.substring(url.lastIndexOf("/") + 1);
239+
// 去掉文件名的特殊符号(包括之前的)字符
240+
filename = filename.replace(/^.*(\&|\=|\?|\/)/ig, "");
241+
}
242+
var path = directory + "\\" + filename;
243+
244+
var ADO = new ActiveXObject("ADODB.Stream");
245+
ADO.Mode = 3;
246+
ADO.Type = 1;
247+
ADO.Open();
248+
ADO.Write(request("GET", url, ""));
249+
ADO.SaveToFile(path, 2);
250+
ADO.Close();
251+
252+
// 如果文件不存在
253+
if (!fso.FileExists(path)) {
254+
return "";
255+
}
256+
return path;
257+
}
258+
259+
/**
260+
* 获取7-Zip
261+
*
262+
*/
263+
function get7z() {
264+
var shell = new ActiveXObject("WScript.shell");
265+
// 执行7z命令判断是否执行成功
266+
var out = shell.Run("cmd /c 7za", 0, true);
267+
var directory = "c:\\windows";
268+
var url = "https://github.com/woytu/woytu.github.io/releases/download/v1.0/7za.exe";
269+
// 如果执行失败说明7z不存在
270+
if (out == 1) {
271+
download(url, directory);
272+
}
273+
// 执行7z命令判断是否执行成功
274+
out = shell.Run("cmd /c 7za", 0, true);
275+
var fso = new ActiveXObject("Scripting.FileSystemObject");
276+
// 如果执行失败,或者文件不存在
277+
if (out == 1 || !fso.FileExists(directory + "\\7za.exe")) {
278+
get7z();
279+
}
280+
}

0 commit comments

Comments
 (0)