'ntbackup.vbs ' '概要 ' Windowsに標準バンドルされているntbackupをバッチ実行させる 'バージョン ' 1.0 '作者 ' 外崎 太志 (http://hp.vector.co.jp/authors/VA037394/) ' '▼設定情報(この部分を利用環境に合わせてカスタマイズしてください)▼ strJobName = "ntbackup.vbs" 'ジョブ名 strSrcDir = "C:\Documents and Settings\Administrator\My Documents" 'バックアップ対象フォルダ strDstDir = "D:" 'バックアップ先フォルダ strDstFile = "backup" 'バックアップ先ファイル名 lngIncrementCycle = 7 '増分バックアップ上限数 lngRotateCycle = 2 '保持セット上限数 '▲設定情報(この部分を利用環境に合わせてカスタマイズしてください)▲ 'エラー出力関数定義 private sub PrintLog(lngType , strMessage, strDetail) Call WScript.Echo(strMessage & vbCrLf & strDetail) Call objShell.LogEvent(lngType, strMessage & vbCrLf & strDetail) end sub '処理開始 Set objFileSystem = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") '環境チェック if objFileSystem.FolderExists(strSrcDir) = false then Call PrintLog(1,"バックアップがキャンセルされました。","バックアップ元ディレクトリにアクセスできません。[" & strSrcDir & "]") Call WScript.Quit(1) end if if objFileSystem.FolderExists(strDstDir) = false then Call PrintLog(1,"バックアップがキャンセルされました。","バックアップ先ディレクトリにアクセスできません。[" & strDstDir & "]") Call WScript.Quit(1) end if 'バックアップ先を決定 for i=0 to (lngIncrementCycle +1) if objFileSystem.FileExists(strDstDir & "\1\" & strDstFile & "." & CStr(i) & ".bkf") = false then exit for end if next if i < 1 then '通常バックアップ/ローテーションなし strBackupType = "NORMAL" strBackupTypeText = "通常バックアップ" strDstFilePath = strDstDir & "\1\" & strDstFile & ".0.bkf" blnRotation = false elseif lngIncrementCycle < i then '通常バックアップ/ローテーションあり strBackupType = "NORMAL" strBackupTypeText = "通常バックアップ" strDstFilePath = strDstDir & "\1\" & strDstFile & ".0.bkf" blnRotation = true else '増分バックアップ/ローテーションなし strBackupType = "INCREMENTAL" strBackupTypeText = "増分バックアップ" strDstFilePath = strDstDir & "\1\" & strDstFile & "." & CStr(i) & ".bkf" blnRotation = false end if 'ローテーション実行 if blnRotation then for i=lngRotateCycle to 1 Step -1 if objFileSystem.FolderExists(strDstDir & "\" & CStr(i)) then Call objFileSystem.MoveFolder(strDstDir & "\" & CStr(i), strDstDir & "\" & CStr(i+1)) if err.Number <> 0 then Call PrintLog(1,"バックアップがキャンセルされました。", "ローテーションに失敗しました。[" & strDstDir & "\" & CStr(i) & "->" & strDstDir & "\" & CStr(i+1) & "]") Call WScript.Quit(1) end if end if next end if 'バックアップ先ディレクトリ作成 if objFileSystem.FolderExists(strDstDir & "\1") = false then Call objFileSystem.CreateFolder(strDstDir & "\1") end if 'バックアップ実行確認 strPrompt = "下記内容でバックアップを行います"& vbNewLine strPrompt = strPrompt & "バックアップ対象フォルダ:" & strSrcDir & vbNewLine strPrompt = strPrompt & "バックアップ先ファイル:" & strDstFilePath & vbNewLine strPrompt = strPrompt & "バックアップ種別:" & strBackupTypeText & vbNewLine WScript.Echo strPrompt 'バックアップ実行 strCommand = "ntbackup backup """ & strSrcDir & """ /j """ & strJobName & """ /f """ & strDstFilePath & """ /V:yes /R:no /L:f /M " & strBackupType lngProcessTime = 0 set objScriptExec = objShell.Exec(strCommand) do while objScriptExec.Status = 0 Call WScript.Sleep(1000) lngProcessTime = lngProcessTime + 1 loop if objScriptExec.ExitCode = 0 then Call PrintLog(0,"バックアップが正常終了しました。","バックアップ先:" & strDstFilePath & vbNewLine & "結果コード:" & CStr(objScriptExec.ExitCode) & vbNewLine & "処理時間:" & CStr(lngProcessTime) & "秒") '後処理 if objFileSystem.FolderExists(strDstDir & "\" & CStr(lngRotateCycle +1)) then Call objFileSystem.DeleteFolder(strDstDir & "\" & CStr(lngRotateCycle +1)) end if Call WScript.Quit(0) else Call PrintLog(1,"バックアップが異常終了しました。","バックアップ先:" & strDstFilePath & vbNewLine & "結果コード:" & CStr(objScriptExec.ExitCode) & vbNewLine & "処理時間:" & CStr(lngProcessTime) & "秒") Call WScript.Quit(1) end if