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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值