スポンサーリンク

BATとWSHのコードを1ファイルに混在させるためのshebang記法(複雑なバッチを1ファイルで実現)

WSH/JScriptバッチのコードを,単一のBATファイルの中に埋め込むことが可能。

つまり,複雑なバッチを1ファイルで実現できる。

hoge.bat

@if(0)==(0) ECHO OFF
echo ■BATによる前処理です。■
cscript.exe //nologo //E:JScript "%~f0" %*
echo ■BATによる後処理です。■
@pause
GOTO :EOF
@end

WScript.echo("WSHによる処理です。■");


これをダブルクリックすると,DOSコマンドの行と,WSHのコードの行が,両方ともいっぺんに実行される。


出力される実行結果:

■BATによる前処理です。■
■WSHによる処理です。■
■BATによる後処理です。■
続行するには何かキーを押してください . . .


動作原理と仕組みは,下記のサイトに詳しく書かれている。

  • コマンドプロンプトで,@で始まる行は「出力の抑止」の意味。(そして,WSHの部分はGOTOで読み飛ばす。)
  • MS JScriptで,@if() は,「@ifステートメント」と呼ぶ。条件付きでコンパイルされる。(だから,BATの部分は読み飛ばす。)

このように,ソースコード中のある部分が,言語の違いによって解釈の方法が2通りに分かれる。

JScript でハマる日々 - m2
http://d.hatena.ne.jp/miya2000/200908...


へたれたプログラマの憂鬱 JScriptの実行Logoを表示したくないのです。
http://atl.blog.shinobi.jp/html%EF%BC...


便利なので,WSHのshebangとも呼べる。

このテクニックを使ったサンプルコードがいくつかある。

JScriptでInputBoxの代わりに・・・: korokaraのブログ
http://180.cocolog-nifty.com/blog/2012/04/jscriptinputbox.html


Lite & Seen Lite
http://www17.ocn.ne.jp/~lite/rubyproG...


ZIPファイルを作成/追加/置換するバッチファイル: Windows Script Programming
http://scripting.cocolog-nifty.com/bl...


DATE/TIMEコマンドやDATE/TIME環境変数の形式は地域に依存します。: Windows Script Programming
http://scripting.cocolog-nifty.com/bl...


正規表現でリネームする。: Windows Script Programming
http://scripting.cocolog-nifty.com/bl...


ZIP圧縮の待ち合わせ方法: Windows Script Programming
http://scripting.cocolog-nifty.com/bl...