terrariaのマルチプレイデータを
手動でバックアップ取るのが面倒で
自動でやる仕組みを作ってたのでやり方をメモ。



1.バッチファイルを用意する

メモ帳でtxtファイル作って.batで保存する。

###バッチファイルの内容ここから###

REM 日時を取得して形式を整理
set date_tmp=%date:/=%
set time_tmp=%time: =0%
set yyyy=%date_tmp:~0,4%
set mm=%date_tmp:~4,2%
set dd=%date_tmp:~6,2%
set hh=%time_tmp:~0,2%
set mi=%time_tmp:~3,2%
set ss=%time_tmp:~6,2%
set time_tmp=
set date_tmp=

REM パス移動
cd C:\Terraria\ModLoader\Worlds

REM コピー
copy Calamity02.twld .\backupdata
copy Calamity02.twld.bak .\backupdata
copy Calamity02.wld .\backupdata
copy Calamity02.wld.bak .\backupdata

REM リネーム
cd backupdata
rename Calamity02.twld Calamity02_%yyyy%_%mm%_%dd%_%hh%_%mi%_%ss%.twld
rename Calamity02.twld.bak Calamity02_%yyyy%_%mm%_%dd%_%hh%_%mi%_%ss%.twld.bak
rename Calamity02.wld Calamity02_%yyyy%_%mm%_%dd%_%hh%_%mi%_%ss%.wld
rename Calamity02.wld.bak Calamity02_%yyyy%_%mm%_%dd%_%hh%_%mi%_%ss%.wld.bak


###バッチファイルの内容ここまで###


解説

・REM ~~ 
コメント。実際の動作には関係ない。

・日時を取得して形式を整理
1行目 data_tmpに現在の日付の文字列から「/」を抜いたものを入れる。
   例:2021/07/07→ 20210707
2行目 time_tmpに現在の時間の文字列の「 」(スペース)を0に置き換えたものを入れる
   例: 8: 5:30.12→08:05:30.12
3~8行目 年 月 日 時 分 秒 をそれぞれ別々の変数に入れる
   例:set mm=%date_tmp:~4,2%
    ↑date_tmpの4番目から2文字をmmに入れろ(08:05:30.12の「05」)
9~10行目 使い終わったやつを一応初期化してる

・パス移動
コピーしたいファイルがある場所に移動してる、C以外のドライブの場合は例えばDドライブなら
D:
cd D:\Terraria\ModLoader\Worlds
みたいな感じで2行で書く

・コピー
4つのファイルをそのままの名前で \backupdataフォルダ内にコピーしている

・リネーム
最初に取得した日時変数を使用してコピーしたファイルの名前を変更している。
Calamity02_2021_07_07_08_05_30.wld みたいなのが生成される。




2.バッチファイルを呼び出すVBScriptを用意する。

バックアップしたいだけなら不要だが、
いちいちコマンドプロンプト窓が一瞬出てくるのが邪魔なので
「VBScriptからバッチファイルを窓を表示せずに呼び出して実行」という事をする。
バッチファイルと同じくメモ帳で適当に作って.vbsで保存する。

###VBScriptの内容ここから###
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c ""C:\Terraria\ModLoader\Worlds\backup.bat""", 0
###VBScriptの内容ここまで###

バッチファイルのパスを指定して、それを実行しろという内容。
最後の「,0」がウインドウ表示しなくて良いよという命令らしい。



3.ウィンドウズのタスクスケジューラで定期的に実行

タスクの作成
→トリガーで動作タイミングを指定
→操作で上で作ったVBScript(かバッチファイル)を指定

「プログラム/スクリプト」 :wscript.exe
「引数の追加」:"C:\Terraria\ModLoader\Worlds\backup.vbs"

こんなかんじ。


コメント