曜日や日付によってバッチファイルの処理を切り替えたいと思っても、バッチファイルの機能だけでこれを実現するのは容易ではない。しかしWSHを組み合わせれば、簡単に実現できる。曜日や日付に限らず、必要に応じてカスタマイズしたスクリプトを用意することもできる。
対象OS:Windows 95 / Windows 98 / Windows 98 SE / Windows Me / Windows NT / Windows 2000 Professional / Windows XP Professional / Windows XP Home Edition / Windows 2000 Server / Windows 2000 Advanced Server
バッチファイルを利用して定型処理を自動化するとき、日付や曜日によって実行する処理を切り替えたいと思うことはよくある。例えば、月曜日にはフルバックアップを、火曜日から金曜日には差分バックアップを取るという処理を1つのバッチファイルで行ないたいといった場合だ。
Windowsのコマンドプロンプトからは、%DATE%や%TIME%といった環境変数で日付や時刻を取得することができるが、実際にこれらを使って複数の処理を使い分けるのは難しい。
曜日や日付を返すVBScriptを用意し、これをバッチファイルの中から呼び出すようにすれば、期待する処理を簡単に実現できる。
まずは、以下のように1行だけからなるVBScript(以下VBS)を用意してほしい。
WScript.Quit(WeekDay(Date))
これは、Date関数で取得される現在の日付を、WeekDay関数で1(日曜日)〜7(土曜日)の整数値に変換し、それを戻り値として終了するだけのスクリプトだ。バッチファイルの中からこれを実行すれば、結果(曜日)をERRORLEVELとして取得することができる。以降の説明では、このVBSがC:\WINDOWS\wday.vbsという名前で保存してあるものとする。
具体例として、月曜日にはfullback.bat、火曜〜金曜日にはincback.batを呼び出し、週末(土曜日と日曜日)には何もしないというバッチファイルを書いてみると以下のようになる。
@echo off
cscript /b c:\windows\wday.vbs
if errorlevel 7 goto END
if errorlevel 3 call incback.bat & goto END
if errorlevel 2 call fullback.bat
:END
バッチファイルで利用できる条件分岐が貧弱なため、あまり見栄えのいいものではないが、これでも目的は達成できる。
ただし、wday.vbsの後に何か別のコマンドを実行すると、ERRORLEVELは新しい値で置き換えられてしまうので注意が必要だ。バッチファイルの中で曜日の値を再利用したいのなら、次のように、結果を別の環境変数に保存しておく。
cscript /b c:\windows\wday.vbs
if %errorlevel%==7 set WDAY=SAT
if %errorlevel%==6 set WDAY=FRI
if %errorlevel%==5 set WDAY=THU
if %errorlevel%==4 set WDAY=WED
if %errorlevel%==3 set WDAY=TUE
if %errorlevel%==2 set WDAY=MON
if %errorlevel%==1 set WDAY=SUN
日付によって処理を切り替えたければ、以下のようなVBSを用意すればよい。
WScript.Quit(Day(Date))
このVBSをバッチファイルから呼び出すと、ERRORLEVELに今日の日付(1〜31までの整数値)が入る。ほかにもMonth関数を使えば、月を返すこともできるし、日付を返すDateの代わりにTimeを使えば時刻を扱うこともできる。
場合によっては、特定の曜日や日付、時刻を判断して、処理を切り替える必要に迫られるかもしれない。このような場合には、曜日や日付、時刻を判定する部分をVBS(またはJScript)で記述して、判定結果を0または1で返すようにすれば簡単に対応できる。
現在のWindowsには、高機能なスクリプト言語としてWSHが標準で搭載されている。しかし言語仕様や使い勝手などがバージョンアップのたびに大きく変更されたこと、ドキュメントが十分に整備されていないなどの理由から、WSHを活用しているユーザーはあまり多くないようだ。代わりに、ちょっとした定型業務の自動化では、使い慣れたバッチファイルを活用する管理者がいまなお多い。
今回の記事で分かるとおり、WSHかバッチかという選択は二者択一ではない。WSHを利用してオリジナルの外部コマンドを作成して、これをバッチファイルの中から呼び出すようにすれば、バッチの弱い部分をWSHで補間しながら、使い慣れたバッチの機能を向上させることが可能である。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.