俺の開発研究所

Ruby on Rails、Linux、Windowsを中心にIT技術系の備忘録とか。よく忘れるので。

*

WindowsコマンドとVBScriptでファイルバックアップ・世代管理-2

      2016/01/06

前回の続き。

前回の記事はこちら⇒WindowsコマンドとVBScriptでファイルバックアップ・世代管理-1

WindowsコマンドとVBScriptでファイルバックアップ・世代管理処理を行う。

なお、今回作成したスクリプトは以下の2本です。

  • backup.bat
  • file_generation.vbs

スポンサード リンク

開始ログ出力(Windowsコマンド)

まずは、ログ出力。

日付は「%date%」、時刻は「%time%」で取得できる。

ただし、日付は「/」、時刻は「:」と「.」が入っているので、それらを除外する。

「%X:~0,4%」とすると、文字列Xの0文字目から4文字分取得できる。

時刻は、時間が1桁の場合、先頭が空白になってしまうので、置換してやる。

「%X:a=b%」とすると、文字列Xのaをbに置換できる。

ファイルバックアップ(Windowsコマンド)

続いて、ファイルバックアップ。

ファイルコピーは「cp」コマンド。

もしエラーとなった場合は、「if」と「ERRORLEVEL」を使用して条件分岐し、エラーログを出力する。

「ERRORLEVEL」は、コマンドが正常終了した場合は「0」、異常終了した場合は「1」となるので、「0」以外の場合はエラーログを出力するようにしている。

なお、バックアップ対象ファイルは、コマンドライン第1引数。

バックアップファイルはファイル名先頭に日時を付け、「backup」フォルダにコピーする。

バックアップファイル世代管理(VBScriptファイル呼び出し)

まずは、バックアップファイル世代管理処理(VBScript)を呼び出すところ。

コマンドライン第2引数を管理ファイル数として引き渡す。

続いて、バックアップファイル世代管理処理のVBScript。

ファイル一覧取得はWindowsコマンド「dir」を使用して更新日時昇順で取得し、その結果をループさせ配列に格納する。

そのコマンドは「dir /a-d /b /od backup」。

「/a-d」でディレクトリを除く一覧を取得、「/b」でファイル名のみを表示、「od」で日時順で一覧を取得といった感じ。

ファイル削除時の例外処理は、ファイル削除箇所の前に「On Error Resume Next」と書き、ファイル削除箇所の後「If Err.Number <> 0 Then」で例外処理をしている。

例外発生時は、「WScript.Quit(1)」でコマンドラインに「1」(エラー)を返すようにしている。

終了ログ出力(Windowsコマンド)

最後に、再びログ出力。

実行

実行はこんな感じで、第1引数にバックアップ対象ファイル、第2引数にバックアップファイル世代管理数を指定し、実行する。

ログファイル「backup.log」はこんな感じで出力されます。

2行目、3行目はエラー時にのみ出力されます。

ふう、ようやく完成したー。

GitHub(ソースはコチラで公開中)

ファイルバックアップ・世代管理スクリプト。

参考サイト

ERRORLEVELについてのメモ (1) – とあるソフトウェア開発者のブログ

Windows TIPS:バッチ・ファイル中で日付をファイル名に使用する – @IT

@IT:Windows TIPS — Tips:dirコマンドでファイル名の一覧を取得する

基礎解説 演習方式で身につけるチェック式WSH超入門:第9回 VBScriptのオブジェクトを使いこなす (2/4) – @IT

コマンドラインにエラーコードを返すには-WSH@Workshop

 - VBScript, Windows