📄 jszip.js
字号:
/*cscript.exe执行*/
/***********
文件操作函数
***********/
fso=new ActiveXObject("Scripting.FileSystemObject");
function wfile(fname,s){ //写文件
var fp=fso.CreateTextFile(fname,true,false);
fp.Write(s);
fp.close();
}
function rfile(fname){ //读文件
var fp=fso.OpenTextFile(fname,1,false);
var s=fp.ReadAll();
fp.Close();
return s;
}
function afile(fname,s){ //追加写入
if(!fso.FileExists(fname)) { wfile(fname,s); return; }
var fp=fso.OpenTextFile(fname,8,false);
fp.Write(s);
fp.close();
}
function fdelete(fname){ fso.DeleteFile(fname); }
function fexists(fname){ return fso.FileExists(fname); }
function dexists(dir) { return fso.FolderExists(dir); }
function getfiles(path,lx){ //取指定路径内的文件表,lx为folder时取子目录表
var f=fso.GetFolder(path),fc;
if(lx=="folder") fc=new Enumerator(f.SubFolders);
else fc=new Enumerator(f.files);
var s=new Array();
for(; !fc.atEnd(); fc.moveNext())
s[s.length]=fc.item();
return s;
}
/***********
javascript源程序压缩,可直接使用函数为jsCompress()
***********/
var deleSpaceN=10000000; //delSpace()有效执行次数(用于调试压缩后的程序)
function deleSpace(s){//去除空白符
if(deleSpaceN<=0) return s;
deleSpaceN--;
//某此关键字后面的空格应保留一个
s=s.replace(/function[ \t]+/g,'function__KG__');
s=s.replace(/new[ \t]+/g, 'new__KG__' );
s=s.replace(/var[ \t]+/g, 'var__KG__' );
s=s.replace(/else[ \t]+/g, 'else__KG__' );
s=s.replace(/return[ \t]+/g, 'return__KG__' );
s=s.replace(/[ \t]+in[ \t]+/g, '__KG__in__KG__' );
s=s.replace(/[ \t\r\n]/g,'');
//s=s.replace(/[ \t]/g,'');
//s=s.replace(/[\r\n]+/g,'\r\n');
s=s.replace(/__KG__/g,' ');
return s;
}
function deleZS(s){ //快速去除段落注释
var p1=0,p2,out='';
while(1){
p2=s.indexOf('/*',p1); //取串的末点
if(p2<0) p2=s.length; //找不到则定位到串尾
out+=s.substr(p1,p2-p1);
p1=s.indexOf('*/',p2)+2; //取串的起点
if(p1<2) return out;
}
}
function jsCompress(s){
s=s.replace(/\/\/[^\r\n]*/g,''); //去除行注释
s=deleZS(s); //去除段落注释
s=s.replace(/\\\'/g,'_TSdy'); //串内的单引号
s=s.replace(/\\\"/g,'_TSsy'); //串内的双引号
var i,c, out='', p1=0, cf='';
for(i=0;i<s.length;i++){
c=s.substr(i,1);
if( c!="'" && c!='"' ) continue;
if(!cf){
out += deleSpace(s.substr(p1,i-p1));
p1=i;
cf=c;
continue;
}
if(c==cf){
out+=s.substr(p1,i+1-p1);
p1=i+1;
cf='';
}
}
out += deleSpace(s.substr(p1,i-p1));
out=out.replace(/_TSdy/g,"\\\'");
out=out.replace(/_TSsy/g,'\\\"');
return out;
}
/***********
WScript操作
***********/
function getLine(){
//WScript.StdIn.Skip(1);
var a='';
while(!WScript.StdIn.AtEndOfLine) a+=WScript.StdIn.Read(1); //缓存中读入一行,read()会读换行符,所以遇至换行符就不再循环
WScript.StdIn.Read(2);
return a;
}
/***********
程序开始
***********/
var about='\
============================================\n\
欢迎使用《寿星JSscript压缩器》。 \n\
功能:将多个js脚本合并压缩到HTML中 \n\
设计:许剑伟 2008年12月9日 \n\
============================================\n\
1、jsZip程序需4个入口参数:\n\
2、语法:\n cscript jsZip.js 目标.htm 缩主.htm 源1.js+源2.js+..+源n.js 压缩段落数\n\
3、范例:\n cscript jsZip.js index.htm wnl.htm a1.js+a2.js+a3.js 1000000 \n\
4、注意:所有文件路径表达是相对"脚本.js"而言的。\n\
5、jsZip在寿星万年历中调试通过。\n\
6、缩主htm 内最好有<!--js1S-->和<!--js1E-->这两个标签,压缩后的JS脚本将替换这两个标签之间的内容。\n\
7、本压缩器适用于JavaScript \n\n\
8、压缩段落数用于调试。在去除换行符时可能因源程序不规范(如误句结束时没有加";")而造成压缩后的程序不可用。分段调试有助于快速找出原因。\n\
9、所谓段落数指:以程序中的静态字串作为段落的分界,即静态串看作一个整体作为分界符。程序不对静态串作任何压缩处理。\n\
============================================\n\n\
';
var i,ph,p1,p2,s='',s2='';
ph=WScript.ScriptFullName;
ph=ph.substr(0,ph.lastIndexOf("\\")+1); //当前路径
WScript.Echo(about);
var args=WScript.Arguments; //命令行参数
if(args.length!=4){
getLine();
WScript.Quit();
}
deleSpaceN = args.item(3)-0; //设置压缩的段落数(一个字串看作段落的分界符),调试用
//合并js源文件
var fs = args.item(2); //源js文件
fs=fs.split('+');
for(i=0; i<fs.length; i++){
if(fs[i]=='') { WScript.Echo('源js文件名称无效'); getLine(); WScript.Quit(); }
if(!fexists(ph+fs[i])) { WScript.Echo(fs[i]+' 文件不存在!'); getLine(); WScript.Quit(); }
}
WScript.Echo('\r\n正在读取文件...');
for(i=0,s=''; i<fs.length; i++) s += rfile(ph+fs[i]);
//压缩文件
WScript.Echo('正在压缩文件...');
s=jsCompress(s);
s='<script language="javascript">\r\n' + s + '\r\n</script>\r\n';
//将js插入htm中
fs=args.item(1);
if( !fexists(ph+fs) ){ WScript.Echo(fs+' 缩主htm不存在'); getLine(); WScript.Quit(); }
s2 = rfile(ph+fs);
p1=s2.indexOf('<!--js1S-->');
p2=s2.indexOf('<!--js1E-->')+11;
if(p1>=0&&p2>=0)
s2 = s2.substr(0,p1) + s + s2.substr(p2,s2.length-p2); ////写目标文件(合并文件)
else s2=s+s2;
//保存到目标文件中
fs=args.item(0);
if( fexists(ph+fs) ){
WScript.Echo(fs+' 目标文件已存在。覆盖吗?(y/n)');
if(getLine()!='y') WScript.Quit();
}
s2='<!-- saved from url=(0021)http://www.sxwnl.com/ -->\r\n'+s2;
wfile(ph+fs,s2);
WScript.Echo('目标文件:'+ph+fs+' 合并完成');
getLine();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -