【決定版】Windowsで使う「マイクラ統合版サーバーの自動バックアップ」と「自動起動」

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

takalog+ の TAKA-KUN です。

今日は、Windowsで動かすMinecraft(統合版/Bedrock)サーバーを、
「自動でバックアップ」して、「必要なら自動で起動」する仕組みを、やさしく丁寧にご案内します。

今回ご紹介するのは3つのバッチファイルです。

  • startServers.bat:サーバーをまとめて起動するバッチです(クリックで起動)。
  • backup-all_Test.bat:ワールドを丸ごとバックアップして、必要なら再起動までしてくれるバッチです。
  • 停止方法について:今のバッチは taskkill(強制終了)で止めます。安定性を優先するなら「stop」コマンドで丁寧に終了させるバージョンがおすすめです。理由と切り替え方法は後でゆっくり説明します。
  • stopServers.bat:サーバーをまとめてtaskkill(強制終了)で止めるバッチです。すべての方にはおすすめはしませんが、必要な方は使ってもらってもいいと思います。私はブログラムテスト中によく使います。
TAKA-KUN

やっと思い通りのものができました。
プログラムが苦手な方でもわかるように、順を追って説明しますね。

目次

事前準備

フォルダ構成

説明するバッチは次のようなフォルダ構成を前提にしています。

C:\MinecraftBedrockServer\
 ├─ creative01\
 │    ├─ bedrock_server_c01.exe
 │    └─ worlds\
 ├─ saurvival01\
 │    └─ bedrock_server_s01.exe
 ├─ _backup\     ← バックアップ保存先(_ で始まるので処理対象外)
 ├─ startServers.bat
 └─ backup-all_Test.bat

ポイント①:フォルダ名が _(アンダースコア)で始まるものは自動処理から除外します。運用中の不要なフォルダやバックアップ置き場を間違えて起動・処理しないようにするためです。この機能を用いて、複数のサーバフォルダを用意して、アンダーバーを付けたり外したりして切り替えることが可能です。リネームは必ずサーバを停止してから行いましょう。

ポイント②:bedrockサーバ名は自由に変えられます。わかりやすい、ユニークな名称にしてください。自動バックアップの処理はサーバ一つずつ行うので、同じ名称だと、2つ目のサーバ停止のためのtaskkillの処理の際に1つ目のサーバも停止してしまいます。意図せずにサーバを落としてしまうことがあります。サーバを一つで運用するのであれば問題ございません。

ポイント③:バッチファイルの場所は別の場所でもいいですが、管理の観点から同じ場所に置き、ショートカットをデスクトップ等操作しやすい場所に準備することをお勧めします。サーバの場所の指定が必要ですので、設定を必ず行いましょう。

インストールプログラム(7-Zip)

バックアップ処理では、ワールドデータを ZIP 形式でまとめるために、無料の圧縮ソフト 7-Zip を使います。
Windows に標準の ZIP 機能もありますが、7-Zip は 圧縮速度が速く、ファイル数が多いワールドでもエラーが起きにくい ので、自動バックアップととても相性が良いです。

7-Zip のインストール手順

  1. 7-Zip 公式サイトを開く
    公式サイト:https://7-zip.opensource.jp/
  2. “64-bit Windows x64” と書かれている版をダウンロード
    ほとんどの Windows 11 は 64bit なので、そのままで OK。
  3. ダウンロードしたファイルを実行
    いつものソフトと同じように
    「Install」 → 「Close」で完了です。
  4. 特別な設定は不要
    バッチファイルでは C:\Program Files\7-Zip\7z.exe を使うため、
    普通にインストールするだけで自動的にこの場所に入ります。

7-Zip を入れておくことで、大きなワールドでも安定して圧縮でき、バックアップが早く終わるようになります。

① startServers.bat(サーバーを一括で起動する)

「サーバーをひとつずつ起動するのが面倒…」というときに使います。

このバッチは:
1.サーバーフォルダを順にチェック
2.フォルダ内にある .exe(実行ファイル) を順に起動
3.起動した実行ファイルの結果はウインドウに表示

使い方:サーバーPC立ち上げ後やメンテ後にダブルクリックするだけ。

重要設定(バッチ中の先頭にあります)

  • set "SERVER_ROOT=C:\MinecraftBedrockServer":サーバーの保存場所をの右側で指示します。
    (今回はC:\MinecraftBedrockServer です。「英数字」で「スペースを使わない」場所がおすすめです。問題なければ上記に合わせてもらってもOK)

プログラムソースコード(そのままコピペで保存OK)

startServer.bat

@echo off
setlocal enabledelayedexpansion

rem =====================================
rem 設定
rem =====================================
set “SERVER_ROOT=C:\MinecraftBedrockServer”

echo ==== STARTING SERVERS ====
echo Target root: %SERVER_ROOT%
echo.

for /d %%S in (“%SERVER_ROOT%\*”) do (
set “NAME=%%~nxS”

rem “_” で始まるフォルダは起動対象外
if /i not “!NAME:~0,1!”==”_” (
rem 実行ファイル起動
for %%E in (“%%~fS\*.exe”) do start “” “%%E”
)
)

echo All servers started!

rem 10秒後に閉じる
timeout /t 10 >nul
exit

② backup-all_Test.bat(自動バックアップ)

このバッチは以下の動作を行います。

1.サーバーフォルダを順にチェック
2.worlds フォルダ(ワールド)と設定ファイルを 7-Zip で圧縮
3.圧縮ファイルを _backup\サーバ名\ 配下に保存
4.必要ならサーバーを再起動(設定で切替可)
5.ログを backup_log.txt に残す

使い方:手動で実行しても良いし、Windows タスクスケジューラに登録すれば自動化できます。

重要設定(バッチ中の先頭にあります)

  • ON_RUNNING=skip:サーバーが起動中の場合は「スキップ」。
    stop にすると、起動中でもtaskkillを使って停止し、バックアップします。)
  • RESTART_AFTER=yes:バックアップ後にサーバーを自動で起動するか。

ファイル(そのままコピペで保存)

backupAll.bat

@echo off
setlocal enabledelayedexpansion

rem =====================================
rem 設定
rem =====================================
set “SERVER_ROOT=C:\MinecraftBedrockServer”
set “BACKUP_ROOT=C:\MinecraftBedrockServer\_backup”
set “Z7=C:\Program Files\7-Zip\7z.exe”
set “LOG_FILE=%BACKUP_ROOT%\backup_log.txt”

rem ▼ 起動中サーバの扱い(stop / skip)
set “ON_RUNNING=skip”

rem ▼ バックアップ後の再起動(yes / no)
set “RESTART_AFTER=yes”

if not exist “%BACKUP_ROOT%” mkdir “%BACKUP_ROOT%”


rem =====================================
rem 日付・時刻取得
rem =====================================
for /f %%a in (‘powershell -NoProfile -Command “(Get-Date).ToString(\”yyyy-MM-dd HH:mm:ss\”)”‘) do set DATE_FULL=%%a
for /f %%a in (‘powershell -NoProfile -Command “(Get-Date).ToString(\”yyyy-MM-dd\”)”‘) do set DATE=%%a
for /f %%a in (‘powershell -NoProfile -Command “(Get-Date).ToString(\”HHmmss\”)”‘) do set TIME2=%%a

echo [%DATE_FULL%_%TIME2%] Backup Start >> “%LOG_FILE%”
echo ===== Backup Start =====
echo LOG: %LOG_FILE%
echo ————————-

rem =====================================
rem バックアップ処理
rem =====================================
for /d %%S in (“%SERVER_ROOT%\*”) do (
set “NAME=%%~nxS”
if /i not “!NAME:~0,1!”==”_” (
call :BACKUP_SERVER “%%~fS”
) else (
echo [SKIP] “_” で始まるため除外: %%~nxS
)
)

goto END


rem ==========================================================
rem 1 サーバ処理
rem ==========================================================
:BACKUP_SERVER
set “SERVER_PATH=%~1”
set “SERVER_NAME=%~nx1”

echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] Backup START >> “%LOG_FILE%”
echo —- [%SERVER_NAME%] Backup START —-

if not exist “%SERVER_PATH%\worlds” (
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] NO WORLDS → SKIP >> “%LOG_FILE%”
echo [SKIP] %SERVER_NAME% worlds が無いためスキップ
exit /b
)

rem 実行中チェック
set “RUNNING=NO”
for %%E in (“%SERVER_PATH%\*.exe”) do (
tasklist /fi “imagename eq %%~nxE” | find /i “%%~nxE” >nul && set “RUNNING=YES”
)

echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] RUNNING=%RUNNING% >> “%LOG_FILE%”
echo [DEBUG] %SERVER_NAME% RUNNING=%RUNNING%

if “!RUNNING!”==”YES” (
if /i “%ON_RUNNING%”==”skip” (
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] RUNNING → SKIP >> “%LOG_FILE%”
echo [INFO] %SERVER_NAME% 起動中のためスキップ(設定:skip)
exit /b
)
)

rem 停止処理
if “!RUNNING!”==”YES” (
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] Stopping server… >> “%LOG_FILE%”
for %%E in (“%SERVER_PATH%\*.exe”) do taskkill /IM “%%~nxE” /F >nul 2>&1
timeout /t 2 >nul
)

if not exist “%Z7%” (
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] ERROR: 7-Zip NOT FOUND >> “%LOG_FILE%”
echo [ERROR] 7z.exe が見つかりません
exit /b
)

set “DEST_DIR=%BACKUP_ROOT%\%SERVER_NAME%”
if not exist “%DEST_DIR%” mkdir “%DEST_DIR%”

set “ZIP_PATH=%DEST_DIR%\%SERVER_NAME%_%DATE%_%TIME2%.zip”

rem =====================================
rem ★ ZIP処理(ERRORLEVEL が確実に取れる)
rem =====================================
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] Compressing… >> “%LOG_FILE%”
echo [INFO] 圧縮中…

“%Z7%” a -tzip “%ZIP_PATH%” ^
“%SERVER_PATH%\worlds\*” ^
“%SERVER_PATH%\allowlist.json” ^
“%SERVER_PATH%\permissions.json” ^
“%SERVER_PATH%\server.properties” ^
“%SERVER_PATH%\server.log” -mx=3

set ZIP_RESULT=%ERRORLEVEL%

if %ZIP_RESULT% EQU 0 (
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] ZIP SUCCESS (%ZIP_PATH%) >> “%LOG_FILE%”
) else ( )

if not %ZIP_RESULT% EQU 0 (
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] ZIP FAILED (ERRORLEVEL=%ZIP_RESULT%) >> “%LOG_FILE%”
) else ( )

rem ————————————-
rem 再起動判断
rem ————————————-
if /i “%RESTART_AFTER%”==”yes” (
echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] Restarting server… >> “%LOG_FILE%”
for %%E in (“%SERVER_PATH%\*.exe”) do (
start “” “%%E”
)
)

echo [%DATE_FULL%_%TIME2%] [%SERVER_NAME%] DONE >> “%LOG_FILE%”
echo —- [%SERVER_NAME%] DONE —-
exit /b


rem ==========================================================
:END
echo [%DATE_FULL%_%TIME2%] Backup All Completed >> “%LOG_FILE%”
echo ===== Backup All Completed =====
pause
exit

ここで補足(なぜサーバー停止は Stop が良いの?)

  • taskkill(強制終了)は“確実に止められる”けれど、サーバーが内部でセーブ処理をしている途中だとワールドに微妙な破損が起きる可能性があります。
  • 一方、stop(コンソールに文字列で送る)はサーバーに「今から終了します。ちゃんとセーブしますね」と伝えてから終了してくれる方法です。安全でおすすめ

とはいえ、小さなプライベートサーバーやテスト環境では taskkill でも実用上は問題なく動くことが多いので、慣れや運用状況に合わせて選んでください

TAKA-KUN

 stopを文字列を自動で送るバッチファイルは、私のスキルではどうしてもうまくいきませんでした。
 基本的にコンソール画面にstopを打ち込んで止めています。起動時は複数フォルダに入らないといけないですが、停止時はコンソールに打ち込むだけなので、起動時よりは楽です。
 バッチファイル等をテストする際には次に紹介するバッチファイルを使っています。

参考:③ stoptServers.bat(サーバーを一括で停止する)

「サーバーをひとつずつ停止するのが面倒…」というときに使います。

繰り返しになりますが、stop(コンソールに文字列で送る)で停止することが基本です。
taskkill(強制終了)は“確実に止められる”けれど、サーバーが内部でセーブ処理をしている途中だとワールドに微妙な破損が起きる可能性があります。

このバッチは:
1.サーバーフォルダを順にチェック
2.フォルダ内にある .exe(実行ファイル) の名称を取得し、順にtaskkillを実行
3.バッチ完了後自動で閉じる
4.起動したサーバーはコンソールが立ち上がる

使い方:テストを実施していたり、サーバーを強制停止しなければならない際、ダブルクリックするだけ。

重要設定(バッチ中の先頭にあります)

  • set "SERVER_ROOT=C:\MinecraftBedrockServer":サーバーの保存場所をの右側で指示します。
    (今回はC:\MinecraftBedrockServer です。「英数字」で「スペースを使わない」場所がおすすめです。問題なければ上記に合わせてもらってもOK)

タスクスケジューラで自動化する手順

1.スタートメニュー → 「タスクスケジューラ」を開く。
2.右側の「基本タスクの作成」をクリック。
3.名前に「Minecraft Backup」など好きな名前を入れる。
4.「トリガー」で「毎日」や「週次」を設定、時間も決める(深夜帯がおすすめ)。
5.「操作」で「プログラムの開始」を選び、backup-all_Test.bat のフルパスを指定。
6.「完了」を押してセットアップ終了。

同じ流れで startServers.bat を「Windows起動時」に登録しておくと、電源投入で自動的にサーバーが立ち上がります。

最後に:安全運用のためのおすすめ設定

  • まずは ON_RUNNING=skip のまま試運用 → うまくいったら stop に切り替えて一度テストする。
  • バックアップ頻度:小規模なら毎日で十分。大規模ワールドや頻繁に更新があるなら複数回/日を検討。
  • 外部保管:重要なワールドは、別のPCやクラウドにコピーしておくと安心です(事故対策)。
  • ログ確認:初期は backup_log.txt を毎回メモ帳で確認して問題がないかチェックしましょう。
TAKA-KUN

今回は面倒な作業の自動化を紹介しました。
面倒なことは自動化したいですよね。おすすめです。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

TAKA-KUNのアバター TAKA-KUN 自由をデザインする人

ゲームとLinuxが大好きな、デジタルクラフト系ブロガーです。
革小物づくりやDIYなど、手を動かすことで日常を楽しんでいます。
本から学ぶのも好きで、読書を通して、自分らしさを探しています。
最近はピアノとランニングで、心と体のバランスを整えるのが日課です。

目次