バッチ処理については鋭意勉強中ということで、情報の精度についてはご容赦ください。
batファイルからJavaコマンド実行
表題通り、batファイル内にjavaコマンドを書いて実行しようとしたところ、よく見るエラーに遭遇しました。
javaコマンドに限らず、コンピュータが解釈できないコマンドを実行しようとした際に出力されるエラーメッセージです。
これを解決する方法は大きく3つあります。当然ながら、いずれもJavaが正常にインストールされている場合に限ります。
Javaがインストールされているフォルダで実行
JavaがC:\Java
にインストールされている場合、C:\Java\bin
にbatファイルを配置することで実行できるはずです。
要するに、javaコマンドが見つからないので見つかる場所で実行すれば良い、ということです。
Javaを環境変数のPathに登録する
「環境変数」と「レジストリ」は個人的に2大"初心者にはよくわからない仕組み"です。
詳しい説明は省くとして、システム環境変数の変数「Path」に「C:\Java\bin
」を追加し再起動することで実行できるようになるはずです。
既に何らかの値が入っているかと思いますので、その場合は;
で区切って後ろに追加します。
batファイル内で環境変数をSETする
batファイルの中に、java hogefuga
といったコマンドを書く場合、その前に環境変数をSETする文を記述します。具体的には以下の通り。
SET PATH=C:\Java\bin;%PATH% java hogefuga
javaコマンドを実行する前に、既存の環境変数「Path」の先頭にJavaのインストール場所のbinフォルダを指定しています。
つまづいた点
ここまでは特に調べることもなく把握していた内容なのですが、それでもつまづきました。
なぜなら、コマンドプロンプトから実行すればOKで、batファイルから実行すればNGだったからです。
いろいろと調べた結果、以下が原因っぽい気がしました。
ユーザー環境変数とシステム環境変数
環境変数には「ユーザー環境変数」と「システム環境変数」が存在します。
ユーザー環境変数は、ログオンしているユーザに対してのみ有効な環境変数です。
システム環境変数は、全てのユーザに対して有効な環境変数です。誰に対しても有効です。
ユーザ環境変数にPathを追加した場合、コマンドプロンプトではjavaコマンドが実行できましたが、batファイルでは実行できませんでした。
これは、batファイルの実行ユーザがログオン中のユーザでない別のシステムユーザで実行されている可能性が挙げられます*1。
ユーザ環境変数にPathを追加した場合は、システム環境変数のPathの末尾に追加されるようです。
開発機での出来事で、検証等の兼ね合いで複数バージョンのJavaをインストールしているため、環境変数はその度に手を入れていたために発生しました。
なお、検証用にJREをインストールしようとしましたが、Askのツールバーを強制インストールさせようとするあのスタンスは何なんですかね。かなり嫌気が差しました。
続きの記事を書きました。解決編です。
*1:踏み込んで調査していないので恐縮ですが、単なる推測です