WSHスクリプトのBATスクリプトへの組み込み(中編)
前回の続き。まず直感的に考え付くのが、中間ファイル版のパイプ化である。今回は、一週間後の日付けを表示するという具体例でいく。もちろんこの例のように表示だけなら VBScript だけでやればいいのだが、本来はバッチスクリプト部分でバッチスクリプトの方が書きやすい処理が書いてあるものと思ってもらいたい。
@echo off for /f "delims=" %%A in ('findstr /e "'VBS" "%~f0" ^| cscript - //nologo //E:vbs') do set OUT=%%A echo 一週間後の日付けは %OUT%. goto :eof WSCript.echo dateadd("ww",1,date()) 'VBS
しかしだめである。cscript コマンドはパイプからの入力に対応していないようで、
CScript エラー: スクリプト "-" の読み込みに失敗しました (パイプは終了しました。)。
というエラーメッセージを出すだけだ。findstr 直接でなく1行ずつゆっくり出力するフィルターをかませても駄目である。
次に、ruby や bash のように一方では実行され他方では読み飛ばされるような書き方が出来ないか考えてみる。
set A=nothing'&@echo off&setlocal&goto bat WScript.Echo DateAdd("ww",1,date()) if false then :bat for /f "delims=" %%A in ('cscript "%~f0" //nologo //E:vbs') do set OUT=%%A echo 一週間後の日付けは %OUT% goto :eof end if
しかし、これもだめ。VBScript では複数行にまたがるコメントが書けないので、if false で バッチスクリプト部分を囲って、この内部もコンパイル時にパースされて、VBScript のコンパイル時に文法エラーになる。While false でも同じ。
仮に上手く行っても、set A=nothing' & がエコーバックされるのは抑止できない。
そこで、VBScript は諦めて JScript を使うことを考えることにする。もしかしたら、VBScript でも何か技があるのかもしれないが。
JScript なら複数行にまたがるコメントが書けるので、バッチスクリプト部をコメント化出来る。
つづく