M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

JP1/AJS2は基本的にショートファイル名で実行ファイルを取り扱う

先日の記事 JP1/AJSから実行すると*.exe.configが読み取れないケースがある で取り上げた事象の原因がわかりました。分かってみればなんのことはありません。「それは仕様です」ということでした。


JP1/AJS2はPCジョブの[詳細定義]ダイアログボックス*1の[実行ファイル名]欄に指定されたパスを基本的にショートファイル名(別名:8.3形式)に変換した上で実行するのです。必ずショートファイル名が利用されるというのではないのですが、ロングファイル名が利用されるケースのほうが少ないのです。

これについてはHITACHIが公開しているリファレンスのあるページに次のような記載がありました*2

ジョブの実行ファイルの名称は,通常,NTFS(NT File System)およびFAT(File Allocation Table)ボリューム上のファイル用に生成されたショートファイル名に変換されます。ジョブの実行ファイルをショートファイル名に変換しないでロングファイル名で実行したい場合は,次に示す手順でオプションを有効にしてください。

なお,キューレスジョブの場合は,ショートファイル名に変換しないでロングファイル名のまま実行されます。

このページでは「環境設定パラメーターIsExecFindExecutableに『1』を設定」することでこの挙動を抑制する方法が紹介されているのですが、それでもページ末尾には次のようにあります:

次の条件が重なるジョブを実行した場合は,環境設定パラメーターIsExecFindExecutableに「1」を設定していても,実行ファイルをショートファイル名に変換して実行します。キューレスジョブの場合でも,この条件によって実行ファイルをショートファイル名に変換して実行します。

  1. [実行ファイル名]に指定したファイル名が相対パス指定で,ファイル名の拡張子が「.exe」,「.bat」,「.cmd」,「.com」または「.pif」である
  2. 1のファイルパスをジョブ定義の[ワークパス]で指定している


ジョブをロングファイル名で実行したい場合は,次のどちらかの操作を行ってください。

  • [実行ファイル名]に絶対パスでファイル名を指定する
  • システム環境変数にファイルパスを指定し,[ワークパス]にファイルパスを指定しない

おまけに、これは厳密に言って「仕様」なのか不明ですが、[ワークパス]に何も入力していない状態 かつ [実行ファイル名]に絶対パスが指定されている場合でも、コマンドライン引数が[パラメーター]欄に独立して記述され、[実行ファイル名]には文字通り純粋な実行ファイル名が記述された状態である場合(≠実行ファイルの後ろに半角スペース区切りでコマンドライン引数が指定されている場合)、結局実行ファイル名はショートファイル名に変換されてしまうようなのです。

反対に[実行ファイル名]に「実行ファイルの絶対パス+半角スペース+コマンドライン引数」という記述をしていれば、実行ファイル名はロングファイル名として処理されました。