js脚本程序,方便自由修改。
可以自由设置注释内容。指定任意后缀名,目前该程序针对的是c/c++源文件,头部统一添加注释。读取源码时,如发现文件头部已有注释时,会自动删除以前的注释头。
支持子目录下文件递归批量修改。稍作修改就可以设置为不删除,脚本语言方便直接修改。
windows,将该文件直接拷贝到源码所在目录下,双击执行即可。
对于关注源码版权人士,发布工程时使用。
稍作修改即可支持其他各种源码的注释批量添加。
可以自由设置注释内容。指定任意后缀名,目前该程序针对的是c/c++源文件,头部统一添加注释。读取源码时,如发现文件头部已有注释时,会自动删除以前的注释头。
支持子目录下文件递归批量修改。稍作修改就可以设置为不删除,脚本语言方便直接修改。
windows,将该文件直接拷贝到源码所在目录下,双击执行即可。
对于关注源码版权人士,发布工程时使用。
稍作修改即可支持其他各种源码的注释批量添加。
var fso = new ActiveXObject("Scripting.FileSystemObject");
//var fLog = fso.createtextfile("log.txt",true);
var filters=['cxx','c','cpp','h'];
var comment=
"/**********************************************\r\n"+
" \r\n"+
" ylxUtil.dll 模块 \r\n"+
" ---------------版权所有,违者必究-------------------\r\n"+
" \r\n"+
" v1.0 By 穷疯了的程序猿 crazy010110@163.com 2014.6.29\r\n"+
"***********************************************/\r\n";
function doWithFile(fl)
{
fl = fl + '';
//检索文件开头是否已经有注释,有的话,去掉注释。没有的话,直接添加
var s='';
var ext="", extPos = fl.lastIndexOf('.');
if (extPos!=-1)
{
ext = fl.substr(extPos+1).toLowerCase();
}
//file's extend name filter
var i=0;
for( i=0;i<filters.length; i++)
{
if (filters[i] == ext)
{
break;
}
}
if (i==filters.length && filters.length !=0)
{
return;
}
//ForReading 1 以只读方式打开文件。 不能写这个文件。
//ForWriting 2 以写方式打开文件
//ForAppending 8 打开文件并从文件末尾开始写。
var f = fso.OpenTextFile(fl, 1 , false);
if (!f)
{
return;
}
//判断文件开头处是否是注释。
var bStartWithCommentLine = 0, bStartWithCommentBlock=0;
var sline='';
//使用状态机,跳过头部所有注释。
var sFirstLineSrc ="";
var nState = 0;
while (!f.AtEndOfStream)
{
sline = f.ReadLine();
if (/\S+/gi.test(sline))
{
if (/^\s*\/\//gi.test(sline))
{
bStartWithCommentLine = 1;
nState |= 1;//行注释
}else if (/^\s*\/\*/gi.test(sline))
{
bStartWithCommentBlock = 1;
nState |= 2;//块注释开始
}else if((nState&2 )&& /^\S*\*\//gi.test(sline))
{
nState = 4;//块注释结束
}else if (!(nState&2 )&&/\S+/gi.test(sline))
{
sFirstLineSrc = sline;
}
//找到非空行,又不是注释,则直接退出循环。
if (nState==0)
{
sFirstLineSrc = sline;
}
if (sFirstLineSrc.length>0)
{
break;
}
}
}
if ( bStartWithCommentLine==1)
{
//fLog.WriteLine(sline);
}else if (bStartWithCommentBlock==1)
{
//fLog.WriteLine(sline);
}
//写入数据到另一临时新建文件
var fl2 = fl+'._slfsfsafsfxx0_';
var ftmp = fso.OpenTextFile(fl2, 2, true);
ftmp.WriteLine(comment);
if (sFirstLineSrc.length>0)
{
ftmp.WriteLine(sFirstLineSrc);
}
//拷贝原文件剩下的内容
while (!f.AtEndOfStream)
{
sline = f.ReadLine();
ftmp.WriteLine(sline);
}
ftmp.Close();
f.Close();
//删除原文件
fso.DeleteFile(fl, true);
//临时文件重命名为原文件。
fso.MoveFile(fl2, fl);
}
function getPathFiles(spath)
{
var fd = fso.GetFolder(spath);
var fc = new Enumerator(fd.files);
for (; !fc.atEnd(); fc.moveNext())
{
doWithFile(fc.item());
}
fc=null;
var childPaths = new Enumerator(fd.SubFolders);
for (; !childPaths.atEnd(); childPaths.moveNext())
{
getPathFiles(childPaths.item());//rescue call
}
childPaths=null;
}
getPathFiles('.');
//fLog.Close();
fso=null;
为保证头部关键注释不被脚本修改掉,请保证编码时,关键注释不放到文件头。文件头部的注释一律为版权相关注释。