去除 VS.Net 2003 项目的 VSS 息的脚本

  从google搜到的,以前用过一次,后来找不到了,今天好不容易又找到,写在这儿算作备忘。
  好像这段脚本是一个老外写的,VSS信息去除的比较彻底。
  使用方法:把这段代码保存为RemoveVssInfo.js,放到和xxx.sln文件相同的文件夹下,然后双击执行即可。
  代码如下:
// / Global ------------------------------------------------------

var  deleteByForce  =   true ;
var  consoleOnly  =   true ;
var  defaultTimeOut  =   1 ;
var  showDetails  =   false ;

var  WSShell;
var  fso;
var  currentFolder;
var  deletedFiles  =   0 ;
var  modifiedFiles  =   0 ;
var  ForReading  =   1 , ForWriting  =   2 , ForAppending  =   8 ;
var  CharSetDefault  =   - 2 , CharSetUnicode  =   - 1 , CharSetAscii  =   0 ;
var  AttrNormal  =   0 , AttrReadOnly  =   1 , AttrHidden  =   2 , AttrSystem  =   4 ,
AttrVolume 
=   8 , AttrDirectory  =   16 , AttrArchive  =   32 , AttrAlias  =   1024 ,
AttrCompressed 
=   2048 ;


Init();
Main();
// Test();


// / Main ------------------------------------------------------

function  Main() {
    
    
var  text;
        
    
//  say hello
    text  =       " Remove from SourceSafe has started. " ;
    Out(text,
true );
    COut(
" Working folder: \r\n " +  currentFolder);
    
    
    
//  delete files 
     //  *.suo, *.eto, *.vssscc, *.vspscc, vssver.scc, mssccprj.scc
    DeleteFiles( " [.]*([.]suo$|[.]eto$|[.]vssscc$|[.]vspscc$|vssver[.]scc$|mssccprj[.]scc$) " );
    
    
//  modify files
     //  *.etp, *.sln, *.csproj
    ModifyFiles( " [.]*([.]etp$|[.]sln$|[.]csproj$) " );
    
    
//  say goodbye 
    text  =       " Remove from SourceSafe has finished. \r\n\r\n "
            
+   " Deleted files:   \t "   +  deletedFiles  +   " \r\n "
            
+   " Modified files:  \t "   +  modifiedFiles  +   " \r\n " ;
    Out(text,
false );
}

function  Init() {
    
    
//  detect command line
     try  {
        WScript.StdOut.WriteLine(
"   " );
    } 
catch  (e) {
        consoleOnly 
=   false ;
    }
    
    
//  initialize
    WSShell  =   new  ActiveXObject( " WScript.Shell " );
    fso 
=   new  ActiveXObject( " Scripting.FileSystemObject " );
    currentFolder 
=  GetCurrentFolder();
}

// / Files ------------------------------------------------------

//  getcurrent folder 
function  GetCurrentFolder() {
    
    
return  fso.GetFolder(fso.GetFile(WScript.ScriptFullName).ParentFolder);
}


//  delete files by mask
function  DeleteFiles(mask) {
    
var  files  =  FindFiles(mask);
    
var  i;
    
    Out(
" Deleting files " true );
    
    
for  (i = 0 ; i < files.length; i ++ ) {
        
try  {
            fso.DeleteFile(files[i], deleteByForce);
            deletedFiles 
++ ;
        } 
catch  (e) {
            WScript.echo(e.Message);
        }
    }
    
    
if  (deletedFiles  ==   0 ) {
        COut(
" No files were deleted. " );
    }
}


//  find files 
function  FindFiles(mask) {
    
return  GetFiles(currentFolder, mask);
}

//  determine, if filename matches given mask
function  MatchesMask(file, mask) {
    
return   new  RegExp(mask).test(file);
}

//  get files in current folder & subfolders
function  GetFiles(folder, mask) {
    
var  result  =   new  Array();
    
//  do files in current folder
     var  files  =   new  Enumerator(folder.Files);
    
for  (;  ! files.atEnd(); files.moveNext()) {
        
if  (MatchesMask(files.item(), mask)) {
            result.push(
""   +  files.item());
        }
    }
    
//  do subfolders in current folder
     var  folders  =   new  Enumerator(folder.SubFolders);
    
for  (;  ! folders.atEnd(); folders.moveNext()) {
        result 
=  result.concat(GetFiles(folders.item(), mask));
    }
    
return  result;
}

// / Output ------------------------------------------------------

//  output 
function  Out(text, useTimeOut) {
    
if  (useTimeOut) { 
        useTimeOut 
=  defaultTimeOut;
    } 
else  {
        useTimeOut 
=   - 1
    }

    
if  (consoleOnly) {
        WScript.StdOut.WriteLine(text);
    } 
else  {
        WSShell.Popup(text, useTimeOut, 
" Remove from SourceSafe " );
    }
}

//  output 
function  COut(text, useTimeOut) {
    
if  (useTimeOut) { 
        useTimeOut 
=  defaultTimeOut;
    } 
else  {
        useTimeOut 
=   - 1
    }

    
if  (consoleOnly) {
        WScript.StdOut.WriteLine(text);
    } 
}


// / Modify ------------------------------------------------------

//  modify all files matching given mask
function  ModifyFiles(mask) {
    
    
var  files  =  FindFiles(mask);
    
var  i;
    
    Out(
" Modifying files " true );
    
    
for  (i = 0 ; i < files.length; i ++ ) {
//             WScript.echo(files[i]);
//
        try {
            ModifyFile(fso.GetFile(files[i]));
            modifiedFiles 
++ ;
//         } catch (e) {
//
            WScript.echo(e.description);
//
        }
    }

    
if  (modifiedFiles  ==   0 ) {
        COut(
" No files were modified. " );
    }
}


function  ModifyFile(file) {

    
switch  (fso.GetExtensionName(file.Path).toLowerCase()) {
        
case   " etp " :
            ModifyFileETP(file);
            
break ;
        
case   " sln " :
            ModifyFileSLN(file);
            
break ;
        
case   " csproj " :
            ModifyFileCSPROJ(file);
            
break ;
    }
}

function  ReadFile(file) {
    
var  stream  =  file.OpenAsTextStream(ForReading, CharSetDefault);
    text 
=  stream.ReadAll();
    stream.Close();
    
return  text;
}

function  WriteFile(file, text) {
    
var  ro  =  ((file.Attributes  &  AttrReadOnly)  !=   0 );
    
if  (ro) file.Attributes  -=  AttrReadOnly;
    
var  stream  =  file.OpenAsTextStream(ForWriting, CharSetDefault);
    stream.Write(text);
    stream.Close();
    
if  (ro) file.Attributes  +=  AttrReadOnly;
}


//  remove element <SourceControlSettings></SourceControlSettings>
function  ModifyFileETP(file) {

    
var  text;
    
var  re1  =   new  RegExp('(\\s *< SourceControlSettings(\\s[ ^> ] * ) ?> [.\\s\\S\\r\\n] *< \\ / SourceControlSettings > )','m');
    
    text 
=  ReadFile(file);
    text 
=  text.replace(re1,  "" );
    WriteFile(file, text);

}

//  remove section GlobalSection(SourceCodeControl) = preSolution  EndGlobalSection
function  ModifyFileSLN(file) {
    
    
var  text;
    
var  re1  =   new  RegExp('(\\s * GlobalSection\\(SourceCodeControl\\))[.\\r\\n\\s\\S] *? EndGlobalSection','m');

    text 
=  ReadFile(file);
    text 
=  text.replace(re1,  "" );
    WriteFile(file, text);
    
}

//  remove lines with SccProjectName, SccLocalPath, SccAuxPath, SccProvider
function  ModifyFileCSPROJ(file) {

    
var  text;
    
var  re1  =   new  RegExp('( ^ \\s * SccProjectName  =  . * $)', 'm');
    
var  re2  =   new  RegExp('( ^ \\s * SccLocalPath  =  . * $)', 'm');
    
var  re3  =   new  RegExp('( ^ \\s * SccAuxPath  =  . * $)', 'm');
    
var  re4  =   new  RegExp('( ^ \\s * SccProvider  =  . * $)', 'm');

    text 
=  ReadFile(file);
    text 
=  text.replace(re1,  "" );
    text 
=  text.replace(re2,  "" );
    text 
=  text.replace(re3,  "" );
    text 
=  text.replace(re4,  "" );
    WriteFile(file, text);
    
}

转载于:https://www.cnblogs.com/xiaozhang/archive/2008/02/18/1071862.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值