Hitachi

JP1 Version 12 JP1/Script(Windows(R)用)


8.10.5 CallSpt (複数パラメタ指定でSPTファイルを呼び出す)

機能

複数パラメタ指定でSPTファイルを呼び出します。Execコマンドと異なり,現在のプロセスと同一のプロセスで実行します。

形式
CallSptSptFileName〔,Param1 ,Param2 , … ,Param31〕)
指定項目
SptFileName

呼び出すJP1/Scriptスクリプトファイル(.SPT)名を文字列,または値を格納した変数名で指定します。ファイル名の拡張子(.SPT)を省略しても自動的に付加して動作します。

Param1〜31

SptFileNameで指定されたファイルの実行に必要なパラメタがある場合,パラメタを文字列,数値,または値を格納した変数名で指定します。

複数のパラメタを指定できます。

複数のパラメタを一つずつ格納した一次元の配列変数を変数名で指定することもできます。パラメタの記述規則については,「6.2.3 コマンドラインの記述規則」を参照してください。n個のダブルクォーテーション(")を文字としてそのままパラメタに含める場合は,(n*2)個のダブルクォーテーションを指定し,パラメタ全体をダブルクォーテーションで囲んでください。

なお,ExecコマンドやNetExecコマンドで特別な意味を持つ”/SPT:HIDE”,”/SPT:MIN”,”/SPT:MAX”パラメタ,および, “/SPALV(n)”,”/SPXLV(n)”,”/NOEVLOG”パラメタを指定してもコマンドラインパラメタとして渡され,文字列として扱われます。特別な意味は持ちません。

説明

指定されたスクリプトファイルを実行します。

Execコマンドと異なり,現在のプロセスと同一のプロセスで実行します。したがって,プロシージャのように現在のプロセスの環境を共有し,プロセス環境変数を更新することができます。

CallSptコマンドを実行するスクリプトファイル(以下「親スクリプト」という)と,SptFileNameで指定されたスクリプトファイル(以下「子スクリプト」という)の間での変数やプロシージャの関係について次に示します。

  • 子スクリプト内でDimコマンドなどを使用して明示的に宣言された変数は,子スクリプトの中だけで有効なローカル変数になります。

  • 子スクリプト内で明示的に宣言しないで使われている変数も,親スクリプトのCallSptコマンドよりも前,または親スクリプトのさらに上のレベルの親スクリプトで定義されていないかぎりは,ローカル変数となります。親スクリプトのCallSptコマンドよりも前,または親スクリプトのさらに上のレベルの親スクリプトで定義されている場合はグローバルな変数として扱われます。

  • 親スクリプト内,または親スクリプトのさらに上のレベルの親スクリプトで定義されているプロシージャは子スクリプト内で使用することができます。

  • 親スクリプトと子スクリプトで同じ名前のプロシージャが定義されている場合,子スクリプト内では子スクリプトで定義されたプロシージャが有効になります。ただし,親スクリプト内のプロシージャがFunctionプロシージャで子スクリプト内のプロシージャがSubプロシージャである場合,親スクリプトのFunctionプロシージャが有効になります。

  • 子スクリプト内で定義されたローカル変数やプロシージャ,子スクリプトの位置変数は,子スクリプトの実行が終了する(=親スクリプトのCallSptコマンドが終了する)と破棄されます。

  • 子スクリプトを単体で実行する場合,親スクリプトの変数,プロシージャは使用できません。

子スクリプト中の#FileVersionや#Optionの記述,および実行環境ファイル(.SPV)の内容はすべて無視し,親スクリプトの指定で実行します。

コマンドが正常に実行された場合は真(True)を,それ以外の場合は偽(False)を,コマンドの実行結果として返します。コマンドの実行結果が真(True)の場合は,実行ファイルの終了コードを_EXEC_RTN_予約変数に符号付の数値で格納します。

補足
  • ほかのコマンドと異なりCallSptコマンドの文法チェックを行った場合は,SptFileNameで指定されたスクリプトファイルの文法チェックも行います。

  • パラメタに空文字を指定すると,無視されます。パラメタを省略する場合は,明示的な文字列などを呼び出し元から呼び出し先に渡すようにしてください。例2を参照してください。

  • パラメタに空白を含む文字列を指定すると,パラメタを空白で区切った一つの文字列として呼び出し先に渡します。この場合,空白を含む文字列全体をダブルクォーテーション(")で囲んでください。ただし,呼び出し先で受け取ったパラメタのダブルクォーテーション(")を取り除く処理が必要になります。例3を参照してください。

    重要
    • CallSptコマンドで呼び出したスクリプト内でExitコマンドを実行した場合は,CallSptコマンドで呼び出したスクリプトの実行を終了して呼び出し元のスクリプトに戻るだけで,呼び出し元のスクリプトの実行は終了しません。

    • Execコマンド,またはNetExecコマンドで呼び出した実行ファイルの終了待ちをしない場合に,ExitコマンドのオプションのSkipが有効になります。CallSptコマンドで呼び出したスクリプトファイルからExecコマンド,またはNetExecコマンドで呼び出した実行ファイルが終了するのを待たないでスクリプトを終了するには,CallSptコマンドを実行するスクリプトファイルのExitコマンドのオプションにSkipを指定してください。Execコマンド,またはNetExecコマンドを実行するスクリプトファイルのExitコマンドのオプションにSkipを指定してもスクリプトは終了しません。具体的には例4を参照してください。

例1
' スクリプトファイル"Environment.SPT"を実行し,
' プロセス環境変数を更新・参照する。
Dim Path01
rtn = CallSpt(_SCF_+"Environment.SPT", "Get", "Path01", _
Path01)
      :
rtn = CallSpt(_SCF_+"Environment.SPT", "Set", "Path01", _
 _TEMP_)
 
' Environment.SPTの処理
Select Case  %1
Case  "Set"
   SetEnv(ProcessEnv, %2, %3)
Case  "Get"
   %3 = GetEnv(ProcessEnv, %2)
End Select
例2

次の場合,呼び出し元のスクリプトではCallSptコマンドのNULLパラメタ(空文字"")は無視されます。

位置変数%1には"B",%2には"D"が格納され呼び出し先のスクリプトに渡されます。

呼び出し元
CallSpt("A.spt", "B", "", "D")
呼び出し先
Parm1 = %1  ' "B"
Parm2 = %2  ' "D"
Parm3 = %3  ' 空文字""

パラメタを省略する場合は,次のように明示的な文字列などを呼び出し元から呼び出し先に渡します。

呼び出し元
Dim C_Parm
If ・・・ Then
    C_Parm="C"
Else
    C_Parm="***NOTPARAMETA***"
End If
CallSpt("A.spt", "B", C_Parm, "D")
      :
呼び出し先
If %2 <> "***NOTPARAMETA***" Then
    Parm1 = %1 ' "B"
    Parm2 = %2 ' "C"
    Parm3 = %3 ' "D"
Else
    Parm1 = %1 ' "B"
    Parm2 = "" ' 空文字""
    Parm3 = %3 ' "D"
End If

予約変数「_ARGV_CNT_」に呼び出されたときの引数の数が格納されています。引数が省略されていないか確認したい場合は,「_ARGV_CNT_」を使用してチェックしてください。

例3

次の場合,呼び出し元のスクリプトでは位置変数%1に"My",%2に"Documents",%3に"Files"が格納されます。

    CallSpt("A.spt", "My Documents", "Files")

パラメタに空白を含む場合は,文字列全体をダブルクォーテーション(")で囲んで呼び出し先に渡してください。ただし,呼び出し先にはダブルクォーテーション(")を含んだ文字列が渡されますので,次のように前後のダブルクォーテーション(")を取り除く処理が必要になります。

呼び出し元
CallSpt("A.spt", """My Documents""", "Files")
      :
呼び出し先
Dim Parm1
Dim Path1
  Parm1= Mid (%1, 2, Len (%1) - 2)
  Path1 = Parm1 + "\" + %2
      :
例4

呼び出し先の実行ファイルの終了を待たないで呼び出し元のスクリプトを終了する。

呼び出し元 SampleA.SPT
' スクリプトファイル"SampleB.SPT"を呼び出す。
CallSpt(_SCF_+"SampleB.SPT")
    :
' SampleC.EXEの終了を待たないでスクリプトを終了する。
Exit(0,Skip)
呼び出し先 SampleB.SPT
' 実行ファイル"SampleC.EXE"を終了待ちをしない指定で呼び出す。
Exec(_SCF_+"SampleC.EXE",False)
対象バージョン

JP1/Script 06-71以降