@echo off :: :: fusion_placeデータベースバックアップ :: :: ・当バッチファイルの実行には管理者権限が必要です。 :: ・60日より古いバックアップは当バッチファイルの実行により削除されます。 :: :: リターンコード … 当バッチファイルの呼び出し側で、errorlevel 変数により判定可 :: 0: 正常終了 :: 1: 異常終了(サービス停止失敗) :: setlocal :: 定数設定 :: 1) fusion_placeデータベースフォルダ set DB_FOLDER=c:\FusionPlace_DB\db :: 2) データベースバックアップ先親フォルダ set PARENT_FOLDER=c:\FusionPlace_DB_Backup :: 3) バックアップ保持日数 set RETENTION=60 :: 4) 停止待ち時間 set WAIT_SECONDS=60 :: 5) 停止待ち回数上限 set WAIT_LIMIT=10 :: 作業変数セット(バックアップフォルダ名) set dt=%DATE% set tm=%TIME: =0% set bacckup_folder=%PARENT_FOLDER%\%dt:~-10,4%%dt:~-5,2%%dt:~-2,2%_%tm:~0,2%-%tm:~3,2%-%tm:~6,2%\ :: *** Step 1. %RETENTION%日以前の古いバックアップを削除する *** forfiles /P "%PARENT_FOLDER%" /D -%RETENTION% /C "cmd /c rmdir /s /q @file" :: *** Step 2. FusionPlace サービスを停止する *** sc stop FusionPlace :: *** Step 3. FusionPlace サービスの停止を待つ *** :: sc stop コマンドは即時に完了するが、サービスが本当に停止するにはその後いくらか時間を要する。 :: サービス停止するまで待つ。 set wait_count=0 :loop_start :: 1. FusionPlaceサービスの状態を表示する。 echo %DATE% %TIME% ----- FusionPlaceサービス状態表示 開始 待ち回数: %wait_count% sc queryex FusionPlace echo %DATE% %TIME% ----- FusionPlaceサービス状態表示 終了 :: 2. FusionPlaceサービスが停止していれば、停止成功。 set is_stopped=false for /f %%i in ('sc queryex FusionPlace ^| findstr "STATE.*1.*STOPPED"') do set is_stopped=true echo %DATE% %TIME% is_stopped=%is_stopped% if %is_stopped%==true goto successful :: 3. 待ちが%WAIT_LIMIT%回を越えてもサービスが停止していない場合は、停止失敗。 set /a wait_count=%wait_count%+1 echo %DATE% %TIME% wait_count=%wait_count% if %wait_count% GTR %WAIT_LIMIT% goto failed :: 4. %WAIT_SECONDS%秒待ってから停止確認を繰り返す(停止待ちループ先頭に戻る)。 echo %DATE% %TIME% 約 %WAIT_SECONDS% 秒間 WAIT します。 timeout %WAIT_SECONDS% echo %DATE% %TIME% 再開します。 goto loop_start :successful :: *** Step 4. データベースコピー *** xcopy "%DB_FOLDER%" "%bacckup_folder%" /S /E /V /H /Y /R :: *** Step 5. FusionPlace サービスを起動する *** sc start FusionPlace exit /b 0 :failed echo %DATE% %TIME% FusionPlaceサービスを停止できませんでした。 exit /b 1