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:: 开启延迟环境变量扩展
1212setlocal enabledelayedexpansion
1313
14- :: 执行7z命令,但是不输出,这是为了判断
15- 7za > nul
16- :: 如果7z压缩命令行不存在,则下载
14+ :: %~f0 表示当前批处理的绝对路径,去掉引号的完整路径
15+ cscript -nologo -e:jscript " %~f0 " get7z
1716if 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:: 需要打包的文件或文件夹根目录
2322set root = %~dp0
2423:: 需要打包的文件或文件夹
@@ -33,9 +32,11 @@ for %%a in (%currentPath%) do set CurrentDirectoryName=%%a
3332:: 打包完成的文件命名前一部分
3433set 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
4142set GOPROXY = https://goproxy.io
@@ -57,7 +58,7 @@ for %%i in (%allList%) do (
5758:: 使用7z压缩
5859for %%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