batch-file
バッチおよびJSCriptハイブリッド
サーチ…
前書き
JScript
は実際にはJavascript
のスーパーセットです(1.8.1バージョンなのでいくつかの新しい機能は利用できません)、 batch
スクリプトの機能を拡張するためのbatch
スクリプトに埋め込むことができます。通常、埋め込みの技法は、バッチとJScriptコードを分離するためにJScript指令(公式のJavascript標準の一部ではない)を使用しています。 JScriptでは、Com / ActiveXオブジェクト、および標準のJavascriptに加えてWMIオブジェクトを扱うことができます。
バッチファイル内の埋め込みJScript
次の例は、ユーザーのMichael Dillonによってこの回答から作成されています。
次のスクリプトを考えてみましょう。
@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/
//JScript aka Javascript here
このスクリプトスニペットは次の処理を行います。
cscript
コマンドを実行し、提供されたすべての引数を使用して自分自身を呼び出します。@set @junk=1
後の部分がコメントされている@set @junk=1
(/*
と*/
は有効なJScriptコメントです)、JScriptはそれらを無視します。
注意:バッチファイルは
/*
をコマンドとして認識しないので、@set @junk=1
部分が必要ですが、set
文が回避策になります。 JScriptは、/*
をコメントとして認識し、他のbatch
ファイルはJScriptエンジンで実行されません。
*/
後にJScriptを追加して、バッチファイルスクリプトを拡張することができます!
一時ファイルでJScriptを実行する
ここで言及したように 、別のスクリプトを実行する旧式の方法は、一時ファイルを使用することです。 Simpleをファイルにecho
てから実行します(オプションで削除します)。
基本的な考え方は次のとおりです。
@echo off
echo //A JS Comment > TempJS.js
echo //Add your code>>TempJS.js
cscript //nologo //e:cscript.exe TempJS.js
del /f /s /q TempJS.js
しかし、比較的大きなJScriptを作成するには、多くのecho
文が必要です。ここにAaciniのより良い方法があります。
@echo off
setlocal
rem Get the number of the "<resource>" line
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a"
rem Skip such number of lines and show the rest of this file
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > TempJS.js
cscript //nologo //e:cscript.txt TempJS.js
del /f /s /q TempJS.js
goto :EOF
<resource>
JScript
JScript
JScript