Windows TIPS
[Scripting]
曜日や日付によって処理を切り替える(BAT File)
→ 解説をスキップして操作方法を読む
山田 哲弥
2003/04/04
対象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
■
曜日や日付によってバッチ・ファイルの処理を切り替えたいと思っても、バッチ・ファイルの機能だけでこれを実現するのは容易ではない。
■
しかしWSHを組み合わせれば、簡単に実現できる。
■
曜日や日付に限らず、必要に応じてカスタマイズしたスクリプトを用意することもできる。
バッチ・ファイルを利用して定型処理を自動化するとき、日付や曜日によって実行する処理を切り替えたいと思うことはよくある。例えば、月曜日にはフルバックアップを、火曜日から金曜日には差分バックアップを取るという処理を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を用意すればよい。
このVBSをバッチ・ファイルから呼び出すと、ERRORLEVELに今日の日付(1〜31までの整数値)が入る。ほかにもMonth関数を使えば、月を返すこともできるし、日付を返すDateの代わりにTimeを使えば時刻を扱うこともできる。
場合によっては、特定の曜日や日付、時刻を判断して、処理を切り替える必要に迫られるかもしれない。このような場合には、曜日や日付、時刻を判定する部分をVBS(またはJScript)で記述して、判定結果を0または1で返すようにすれば簡単に対応できる。
現在のWindowsには、高機能なスクリプト言語としてWSHが標準で搭載されている。しかし言語仕様や使い勝手などがバージョンアップのたびに大きく変更されたこと、ドキュメントが十分に整備されていないなどの理由から、WSHを活用しているユーザーはあまり多くないようだ。代わりに、ちょっとした定型業務の自動化では、使い慣れたバッチ・ファイルを活用する管理者がいまなお多い。
今回の記事で分かるとおり、WSHかバッチかという選択は二者択一ではない。WSHを利用してオリジナルの外部コマンドを作成して、これをバッチ・ファイルの中から呼び出すようにすれば、バッチの弱い部分をWSHで補間しながら、使い慣れたバッチの機能を向上させることが可能である。
この記事と関連性の高い別のWindows TIPS
generated by
TechTargetジャパン
Windows Server Insider フォーラム 新着記事
キャリアアップ