LoginSignup
14
14

More than 5 years have passed since last update.

Windowsのバッチファイルにjjs scriptを書く

Last updated at Posted at 2014-10-16

Java8からJavaScriptを実行するjjsというコマンドが追加されました。
jjsには通常のJavaScriptの機能に加え、シェルスクリプトの機能も使えるようにする -scripting というオプションがあります。
Nashorn and Shell Scripting
さて、参照先にあるようにUNIXの場合は #!/usr/bin/jjs#!/usr/bin/env jjs といったshebangで書き始めればシェルスクリプト機能を持ったJavaScriptを書けるようになります。
これをWindowsのバッチファイルでも同じようにバッチファイルの中にJavaScriptを書ける方法をお伝えします。

jjsバッチの書き方

ファイルの拡張子はbat、もしくはcmdとします。
改行コードはWindowsのCRLF、文字コードはUTF-8で作成します。
下記の例ではJavaのインストールフォルダを環境変数のJAVA_HOMEにセットしています。

jjs1.bat
rem:/*
@"%JAVA_HOME%\bin\jjs" -scripting "%~f0" %*
@exit /b %ERRORLEVEL%
*/

# ここからJavaScriptのコードを書く
print("こんにちは, Nashorn!");

"%JAVA_HOME%\bin\jjs"の部分はPATHが通っていればjjsだけでOKです。
1行目は出力されてしまいますが(JavaScriptで@を先頭につけてもエラーにならない方法があれば教えて下さい)、他の行はエラーにならないはずです。

jarをクラスパスに追加したい場合は2行目を

@"%JAVA_HOME%\bin\jjs" -scripting -cp \...\a.jar;\...\b.jar "%~f0" %*

と-cp(-classpath)オプションで指定できます。

Java FX

Java FXを使う場合は、jjsに-fxオプションを付けます。
http://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/javafx.html#CEGGACGH のExample 3-4をバッチファイルにしてみます。

fxsample.bat
rem:/*
@"%JAVA_HOME%\bin\jjs" -fx -scripting "%~f0" %*
@exit /b %ERRORLEVEL%
*/

# Example 3-4 JavaFX Script Application with Loaded Scripts
load("fx:base.js");
load("fx:controls.js");
load("fx:graphics.js");

$STAGE.title = "Hello World!";
var button = new Button();
button.text = "Say 'Hello World'";
button.onAction = function() print("Hello World!");
var root = new StackPane();
root.children.add(button);
$STAGE.scene = new Scene(root, 300, 250);
$STAGE.show();

実行するとボタンが1つあるウィンドウが開きます。

まとめ

実はこれで何かすることは何も思いつきませんし、素直にjsファイルをjjsで呼び出せばいい気もしますが、1つのバッチファイル内でJavaのクラスをJavaScriptで呼び出したい(奇特な)方がいましたらぜひお試しください。

14
14
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14