lisz-works

プログラミングと興味を貴方に

ファイルをバックアップするバッチの作成

【スポンサーリンク】

バックアップ

みなさんはネットワークフォルダ等を使って、単純なファイル管理をしているものってありませんか?
(イマドキを考えるとあまりよくないのかもしれませんが)

ファイル管理ソフトを使わないで、ファイルのバックアップって……

地味に面倒じゃないですか?

そんなとき、1発叩くだけで

  1. 作業ファイルを更新する
  2. 格納先ファイルをバックアップ
  3. 格納先へコピー

という作業をしてくれるバッチを作りました!

なにしてくれるの?

バックアップのアップロード先と、対象のファイル名をセットすることで、

  1. 対象のファイルをアップロード先にコピー
  2. アップロード先に既にファイルがある場合、バックアップフォルダにコピー
  3. バックアップフォルダのファイルは、先頭に日時を追加

という処理をしてくれます。

バッチを叩くたびに、日付付きでファイルをどんどんバックアップしてく感じです。

コード

本体

REM - Settings --------------------
call setDate
REM - vvv Customize vvv
set upPath=\\169.254.0.100\upload
set fileName=資料.docx
REM - ^^^^^^^^^^^^^^^^^
set upFile=%upPath%\%fileName%
set bak=_bak
set prefix=%yy%%mm%%dd%%hh%%mi%%ss%_
set bakFile=%upPath%\%prefix%%fileName%


REM - Backup ----------------------
mkdir %upPath%\%bak%
rename %upFile% %prefix%%fileName%
move %bakFile% %upPath%\%bak%


REM - upload ----------------------
copy %fileName% %upFile%

日付取得用(setDate)

こちらは「setDate.bat」という名前で保存しておいてください。

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 time_tmp=
set date_tmp=

使い方

この2つを編集すればOK

  1. upPath
  2. fileName

ちなみに複数ファイルのことは、今は考えてないません(考えろよ)。

処理の説明

ざっくりと処理の説明を。

初期設定

ここでパスの設定を行います。

REM - Settings --------------------
call setDate
REM - vvv Customize vvv
set upPath=\\169.254.0.100\upload
set fileName=資料.docx
REM - ^^^^^^^^^^^^^^^^^
set upFile=%upPath%\%fileName%
set bak=_bak
set prefix=%yy%%mm%%dd%%hh%%mi%%ss%_
set bakFile=%upPath%\%prefix%%fileName%

前述のとおり、

  1. upPath
  2. fileName

を編集すればOK。

call setDate

で、日付を設定するバッチをコールしています。

バックアップ

ここでバックアップを行っています。

REM - Backup ----------------------
mkdir %upPath%\%bak%
rename %upFile% %prefix%%fileName%
move %bakFile% %upPath%\%bak%

具体的には

  1. バックアップ用フォルダの作成
  2. 既にアップロードしたファイルがある場合、リネーム(先頭に日付付与)
  3. リネームしたファイルをバックアップフォルダに移動

アップロード

バックアップするファイルを、アップロード先にコピーします。

REM - upload ----------------------
copy %fileName% %upFile%

使っている構文

コマンド 意味合い
REM コメント
call 他のバッチを実行
set 環境変数に値をセット
mkdir フォルダを作る
rename リネーム(名前の変更)
move 移動
copy コピー

あとがき

ファイル管理ソフト使えよ

って声が聞こえてくる気がしますが、こういう管理が必要な状況でらくちんするためのものということで……

そのうち複数ファイルに対応したいなぁと思っています。