!!!複数スクリプトの混在ファイル 1ファイルに複数のスクリプトを記載する。 !!!バッチファイル + JScript !!自身の JScript を実行するバッチファイル @if (0)==(0) cscript //nologo /E:JScript "%~f0" %* GOTO :EOF @end WScript.Echo("JScript"); バッチファイルで、「if (0)==(0)」が評価され実行される。 「%~f0」でバッチファイルの完全修飾パスが、「%*」で残りのコマンド引数が渡され、JScript が実行される。 JScript では、条件付きコンパイルで「@if (0)」が評価され実行されず、「@end」までスキップされる。 !!1 {{code Text,4 @if (0)==(0) @ECHO OFF ECHO cmd GOTO :EOF @end WScript.Echo("JScript"); }} バッチファイルで実行された場合、 1行目は、「if (0)==(0)」が評価され、''echo off'' が実行される。 2行目以降から、通常のバッチファイルの処理がされ、5行目の「goto :EOF」でファイルの最後にジャンプする(つまり、バッチファイルが終了する)。 1行目で echo off が実行されるので、2行目の echo off と被る。 if の条件を ''(0)==(1)'' などにすれば、if 以降のコマンドは実行されない。 JScript で実行された場合、 1行目は、条件付きコンパイルで「@if (0)」が評価され、6行目の「@end」までは実行されない。 そして、7行目以降が JScript で実行される。 !!2 {{code Text,4 @set @temp=0/* @ECHO OFF ECHO cmd GOTO :EOF */ WScript.Echo("JScript"); }} バッチファイルで実行された場合、 1行目は、「set @temp=0/*」が評価され、 '''@temp''' と言う環境変数に 0/* がセットされる。 2行目以降から、通常のバッチファイルの処理がされ、5行目の「goto :EOF」でファイルの最後にジャンプする(つまり、バッチファイルが終了する)。 JScript で実行された場合、 1行目は、条件付きコンパイルで「@set @temp=0」が評価され、@temp に 0 がセットされる。 そのあとの '''/*''' 〜 '''*/''' まではコメントとなり、7行目以降が JScript で実行される。 !!!バッチファイル + VBScript !!自身の VBScript を実行するバッチファイル ' 2> NUL & @CLS & @cscript //NoLogo //E:VBScript "%~f0" %* & @EXIT /B WScript.Echo "VBScript" バッチファイルで、「' 2> NUL」が実行されるが、「'」と言ったコマンドはなくエラーとなる。 「2> NUL」でエラーメッセージを消し、「CLS」でコンソール画面のメッセージをクリアする。 「%~f0」でバッチファイルの完全修飾パスが、「%*」で残りのコマンド引数が渡され、VBScript が実行して、「EXIT /B」でバッチファイルを終了する。 VBScript では、1行目はコメント扱いで、以降が実行される。