VBScriptの廃止スケジュールが、現実味を帯びてきました。
長らく作業向けにスクリプトを書いたりしてきましたので、いろいろと思いが込み上げてきます。
しかし、それよりも古くからあるバッチファイルについては、今のところ、廃止スケジュールについてはアナウンスされていません。
PowerShellスクリプトのように、特別な権限を与えなくても実行させることができますので、ちょっとした処理をしてもらうには、便利なツールではあります。
さて、単にコマンドラインを順に実行するだけしかできない、と思われがちなバッチファイルですが、実は以下のようなことができます。
(1) ループ処理が使える
実はバッチファイルでもループ処理が使えるのです。
たとえば、絶対にファイルをコピーしてほしいから、10回ファイルコピーするとしましょう。
以下のように10回書いてもよいのですが、
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
copy c:\data\data.txt d:\data\data.txt
set a=0
:loop
copy c:\data\data.txt d:\data\data.txt
if Not %a%==10 goto :loop
とすると、10回ループをバッチファイルでも実現できます。
(2) サブルーチンが使える
関数チックな使い方をすることもできます。
call :label1 引数
exit
:label1
echo %~1
:goto EOF
筆者の作業でよくあるのは、同じ共有名にある同じファイルを複数のサーバーにコピーする場合です。
もちろん、
copy c:\data\settei.ini \\server01\share
copy c:\data\settei.ini \\server02\share
copy c:\data\settei.ini \\server03\share
copy c:\data\settei.ini \\server04\share
copy c:\data\settei.ini \\server05\share
みたいな書き方もできますが、こうすると、
- もう一つコピーしたいファイルが増えた。
- コピーするときに上書きしたい
というときに、編集箇所が多くて間違いのもとになります。
call :filecopy01 server01
call :filecopy01 server02
call :filecopy01 server03
call :filecopy01 server04
call :filecopy01 server05
# ↑ここまでは変更しなくてもよい
exit
:filecopy01
copy /y c:\data\settei.ini \\%1\share
# ↑ここだけ変更すればよい
goto :eof
と記載しておくと、ファイル名の間違いを発見したり、追加があったりしたときに変更箇所が少なくて済みます。
あまり複雑なものを即興で書いたりはしませんが、こういう、ちょっとした作業のときには便利です。
バッチファイルも、いつか消えゆくのでしょう。
でも、まだしばらくは頼ることがありそうです。