批量为文件夹及其子文件下指定后缀名文件添加头注释

来源:互联网 发布:北师珠网络教育平台 编辑:程序博客网 时间:2024/05/03 15:30
js脚本程序,方便自由修改。


可以自由设置注释内容。指定任意后缀名,目前该程序针对的是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;  

 

为保证头部关键注释不被脚本修改掉,请保证编码时,关键注释不放到文件头。文件头部的注释一律为版权相关注释。


0 0
原创粉丝点击