ColdFusionで簡単バックアップ

元記事はこちらです。

■Application.cfm

<cfapplication name="#hash(GetDirectoryFromPath(GetCurrentTemplatePath()))#">

<cfset request.mail_from    = "xxx@yyy.com">
<cfset request.mail_to      = "xxx@yyy.com">
<cfset request.subj         = "cf backup test">

■index.cfm

<!---/////////////////////////////////////////////////////////////////
backup
    1.xcopy.xml内のtoに$date$がある場合は、当日に日付でバックアップ
    2.xcopy-excludelist.txtに除外する拡張子など設定
//////////////////////////////////////////////////////////////////--->

<!--- 処理 --->
<cfset cst_exec()>
<!---=================================================================
cst_exec
==================================================================--->
<cffunction name="cst_exec" returnType="void" output="no">
    <cfset var local = structNew()>

    <!--- 絶対パス取得 --->
    <cfset local.path   = GetDirectoryFromPath(GetCurrentTemplatePath())>
    <cfset local.bat    = local.path & "xcopy.bat">
    <cfset local.xlist  = "/EXCLUDE:" & local.path & "xcopy-excludelist.txt">

    <!--- xmlデータ抽出 --->
    <cfset local.qry = cst_getData()>

    <cfset local.data = "">
    <cfloop query="local.qry">
        <!--- toに$date$がある場合はyyyymmddに変換する --->
        <cfset local.to = replace(local.qry.to, "$date$", "#dateformat(now(),'yyyymmdd')#")>

        <!--- xcopyを呼び出す --->
        <cfexecute
            name = "#local.bat#"
            arguments = "#local.qry.from# #local.to# #local.xlist#"
            timeout = "5"
            variable = "local.tmp"/>

        <cfset local.data = local.data & local.tmp>
    </cfloop>

    <!--- logをメール送信する --->
    <cfmail from="#request.mail_from#" to="#request.mail_to#" subject="#request.subj#">
    #local.data#
    </cfmail>
</cffunction>
<!---=================================================================
cst_getData
==================================================================--->
<cffunction name="cst_getData" returnType="query" output="no">
    <cfset var local = structNew()>
    <cfset local.qry = QueryNew("from,to","varchar,varchar")>

    <!--- 絶対パス取得 --->
    <cfset local.zPath = GetDirectoryFromPath(GetCurrentTemplatePath()) & "xcopy.xml">

    <!--- xml読み込み --->
    <cffile action="read" file = "#local.zPath#" variable = "local.data" charset = "utf-8">

    <cfset local.xml = XmlParse(local.data)>

    <cfset local.data2 = xmlSearch(local.xml, "/xcopy/data")>

    <cfloop index="local.idx" array="#local.data2#">
        <cfset local.from   = local.idx.from.XmlText>
        <cfset local.to     = local.idx.to.XmlText>

        <cfset QueryAddRow(local.qry)>
        <cfset QuerySetCell(local.qry, "from",  local.from)>
        <cfset QuerySetCell(local.qry, "to",    local.to)>
    </cfloop>

    <cfreturn local.qry>
</cffunction>


xcopy.xml



d:\pgm\test001
d:\bak\test001


d:\pgm\test002
d:\bak\test002\$date$



xcopy.bat


xcopy %1 %2\ %3 /D /S /E /H /C /Y /R

xcopy-excludelist.txt


$~
~$
~WRL
.tmp
.temp
IMG00001.DAT
.bkf
.qic
.iso
.img
.mp3
.wmv
.wma
outlook.pst
Thumbs.db
pspbrwse.jbf
pagefile.sys
win386.swp
catalog.wci
.ci
.0
.1
.2
.3
.4
.5
.6
.7
.8
.9
.000
.001
.002
.003
.004
.005
.006
.007
.008
.009
.log
@done
@work
@backup