winrar实现自动备份攻略(二)--自动化生成备份列表及忽略列表

来源:互联网 发布:平面广告知乎 编辑:程序博客网 时间:2024/05/12 02:36

在上一篇中,我们知道了用winrar进行自动备份需要的几个步骤。如制作“备份文件列表”“忽略文件列表”构造命令行参数。如果面对一个比较大的工程,特别是有多个解决方案,每个解决方案又有多个项目时,需要备份的目录和文件很多,而且需要忽略的目录和文件也很多。如果手动的制作“备份文件列表”和“忽略文件列表”,就会非常的繁琐。下面我推荐给大家两个自制的脚本文件("初始化备份列表.js"和"执行备份.js"),一个用于自动生成“备份文件列表”和“忽略文件列表”,另一个用于构造winrar命令行参数,启动winrar的备份进程。

1、假设需要备份mail目录,mail目录的绝对路径为:e:/pimshell/mail。
"初始化备份列表.js"和"执行备份.js"两个脚本文件放入mail目录。
2、双击执行"初始化备份列表.js",自动生成“备份文件列表”和“忽略文件列表”,并放入mail目录。
3、双击执行"执行备份.js",自动构造winrar命令行参数,启动winrar的备份进程。
4、如果需要,你还可以直接将"执行备份.js"的快捷方式放到桌面上。

脚本文件源码下载
"初始化备份列表.js" http://download1.csdn.net/down3/20070601/01003843528.js
"执行备份.js"             http://download1.csdn.net/down3/20070601/01004005378.js

源码抄录如下,若有更新版本请从上面下载:

"初始化备份列表.js" 

/* 初始化备份列表.js
////作者: pimshell 
////博客: http://blog.csdn.net/pimshell
////更新地址:http://blog.csdn.net/pimshell/archive/2007/06/01/1633610.aspx

////当前版本: Version 1.0 - 05/31/2007

////说明: 
1、自动收集当前目录下的所有目录和文件,
将需要备份的放入“list_append.txt”,不需要备份的放入“list_ignore.txt”。
   "list_append.txt"包含要备份的文件(目录)列表
   "list_ignore.txt"包含要忽略的文件(目录)列表

2、进行匹配的“正则表达式”,默认的支持VC++项目的备份。
3、对于其他项目,可根据需要自行修改“正则表达式”(reFile/rePath)。
4、也可以直接修改已生成的"list_append.txt"和"list_ignore.txt"。

5、当前的“正则表达式”指示不备份以下目录和文件:
   所有名含有"debug/release"的目录,
   所有后缀名为".rar/.zip/.ncb/.pdb/.ilk"的文件。


////期望:
为了更好的完善代码,如有好的建议请上博客回复,
也可以随时从“更新地址”下载最新的版本。

////更新地址:http://blog.csdn.net/pimshell/archive/2007/06/01/1633610.aspx

////版本修改历史:

1.0: - 初始版本

*/


var WshShell = new ActiveXObject("WScript.Shell");

//当前目录
var oCurrentDirectory=WshShell.CurrentDirectory;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folder = fso.GetFolder(oCurrentDirectory);
   
//准备两个文件
var oListAppend=fso.CreateTextFile(oCurrentDirectory+"/list_append.txt",true,true);
var oListIgnore=fso.CreateTextFile(oCurrentDirectory+"/list_ignore.txt",true,true);

//关于“忽略”的正则表达式
var reFile = /(.rar$)|(.zip$)|(.ncb$)|(.pdb$)|(.ilk$)/i;
var rePath = /debug|release/i;

//检索目录
_LookupFolder("",folder,true);

//close
oListAppend.close();
oListIgnore.close();

//ok
WshShell.Popup("初始化完毕!",0,"http://blog.csdn.net/pimshell",0);

/////////////////////////////////////////////////////////

function _LookupFolder(oRelativePath,oFolder,bAppend)
{
    
if(oFolder)
    
{
        
//files
        var oFiles=new Enumerator(oFolder.files);
        
for(;!oFiles.atEnd();oFiles.moveNext())
        
{
            
var oName=oRelativePath+oFiles.item().name;
            
            
//
            if(_checkFileName(oName))
            
{
                oListIgnore.WriteLine(oName);
            }

            
else
            
{
                
//因为父目录已加入,所以文件不必加入。
                if(bAppend)
                    oListAppend.WriteLine(oName);
            }

        }

        
        
//subfolders
        var oSubFolders=new Enumerator(oFolder.subFolders);
        
for(;!oSubFolders.atEnd();oSubFolders.moveNext())
        
{
            
var oSubFolder=oSubFolders.item();
            
var oName=oRelativePath+oSubFolder.name;
            
            
//
            if(_checkPathName(oName))
            
{
                oListIgnore.WriteLine(oName);
            }

            
else
            
{
                
//因为父目录已加入,所以子目录不必加入。
                if(bAppend)
                    oListAppend.WriteLine(oName);
                
                
//检测子目录
                _LookupFolder(oName+"/",oSubFolder,false);
            }

        }

    }

}


function _checkFileName(oName)
{
    
return reFile.test(oName);
}


function _checkPathName(oName)
{
    
return rePath.test(oName);
}


 "执行备份.js"

/* 执行备份.js
////作者: pimshell 
////博客: http://blog.csdn.net/pimshell
////更新地址:http://blog.csdn.net/pimshell/archive/2007/06/01/1633610.aspx

////当前版本: Version 1.0 - 05/31/2007

////说明: 
1、自动执行winrar.exe程序
2、"list_append.txt"包含要备份的文件(目录)列表
3、"list_ignore.txt"包含要忽略的文件(目录)列表
4、默认采用的是更新备份的方式。
5、可针对不同的实际应用自行修改命令行的开关值(oSwitch)。

////期望:
为了更好的完善代码,如有好的建议请上博客回复,
也可以随时从“更新地址”下载最新的版本。

////更新地址:http://blog.csdn.net/pimshell/archive/2007/06/01/1633610.aspx

////版本修改历史:

1.0: - 初始版本

*/


var WshShell = new ActiveXObject("WScript.Shell");

//取得加入列表文件的完整路径
var oListAppendPath=_getListAppendPath();

//取得忽略列表文件的完整路径
var oListIgnorePath=_getListIgnorePath();

//检测列表文件是否已初始化
if(!_checkFileExist(oListAppendPath,oListIgnorePath))
{
    WshShell.Popup(
"请先执行“初始化备份列表.js”!",0,"http://blog.csdn.net/pimshell",0);
}

else
{
    
//取得winrar.exe的完整路径
    var oRarPath=WshShell.RegRead("HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/App Paths/WinRAR.exe/");

    
//取得目标文件名
    var oRarTarget=_getTargetPath();

    
//指令/开关
    var oAction=" a ";
    
var oSwitch=" -u -r ";

    
//组合命令行参数
    var oCommand="""+oRarPath+""" + oAction + oSwitch + """+oRarTarget+""" + " @" + oListAppendPath;
    oCommand
+=" -x@" + oListIgnorePath;

    
//提示
    if(6==WshShell.Popup("如果现在开始备份,请点击“是”!",0,"http://blog.csdn.net/pimshell",4))
    
{
        
//执行
        var oExec = WshShell.Exec(oCommand);
    }

}


////////////////////////////////////////////////////////

function _checkFileExist(oListAppendPath,oListIgnorePath)
{
    
try
    
{
        
//
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        
        fso.GetFile(oListAppendPath);  
        fso.GetFile(oListIgnorePath);
    }

    
catch(e)
    
{
        
return false;
    }
            
    
    
return true;
}


function _getListAppendPath()
{
    
var oCurrentDirectory=WshShell.CurrentDirectory;
    
return  oCurrentDirectory + "/list_append.txt";
}


function _getListIgnorePath()
{
    
var oCurrentDirectory=WshShell.CurrentDirectory;
    
return  oCurrentDirectory + "/list_ignore.txt";
}


function _getTargetPath()
{
    
var oCurrentDirectory=WshShell.CurrentDirectory;
    
var n=oCurrentDirectory.lastIndexOf("/");
    
return oCurrentDirectory + oCurrentDirectory.substr(n) + ".rar";
}
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
原创粉丝点击