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行ずつゆっくり出力するフィルターをかませても駄目である。
次に、rubybash のように一方では実行され他方では読み飛ばされるような書き方が出来ないか考えてみる。

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 なら複数行にまたがるコメントが書けるので、バッチスクリプト部をコメント化出来る。

つづく