QSスクリプトは、プログラムを起動する順序を記述したもので、手順を自動実行するために用いる。
同様の目的で用いられたTSスクリプトを代替するもので、バッチ的な性格の強かったTSスクリプトよりも、やや「言語的」性格が強い。
QSスクリプトを直接実行するプログラムは、QS.EXE
、
QSC.EXE
、
QSD.EXE
、
QSE.EXE
、
および
QSMENU,EXE
である。
また、スクリプト置換を含めたプログラムとして、一連のQSCALL.EXE
系列のコマンドがある。
スクリプトを実行するプログラムについて簡単に説明する。
QS.EXE
は、テキストエディタを備え、対話的に実行する場合に用いる。
QSC.EXE
は、その場でスクリプトを実行する。スクリプトに特別な環境変数(QS_ARG...
)を通じてスクリプトに引数を与えることが出来る。
QSD.EXE
も、その場でスクリプトを実行する。QSC.EXE
と異なり、引数を環境変数に設定しない。スクリプトを獲得するためのコマンドラインのパラメータ展開は行う。コマンドラインパラメータ自体の解析はスクリプトの内部で行うこと。
QSE.EXE
も、その場でスクリプトを実行する。引数を環境変数に設定しない。QSD.EXE
と異なり、コマンドラインのパラメータ展開も行わない。コマンドラインの解釈が必要な場合はスクリプト内部で行う。
QSMENU.EXE
は、QSスクリプトを包括したメニュースクリプトを用い、簡単なメニューでのスクリプト選択をする。
QSCALL.EXE
系列のプログラムは、スクリプト実行前に引数置換を行う。引数置換を単純に行う(QSCALL.EXE,QSCALLP.EXE)ものと、引数をシフトしながら置換/実行を繰り返す(QSCALLN.EXE,QSCALLNP.EXE)物に分類できる。また、標準出力の取り扱いから、パイプラインの中で使用できるもの(QSCALLP.EXE,QSCALLNP.EXE)と、使用できないもの(QSCALL.EXE,QSCALLN.EXE)に分類できる。
TSEXPR
の関数の中にQSスクリプトを実行する関数があるので、コマンドラインのTSEXPR
解釈機能を通じて、ほとんどのプログラムは潜在的にQSスクリプトの実行機能を備えている。また、QSスクリプトの実行機能を機能の一部として備えているものもある。
スクリプトは、外部コマンド、内部コマンド(注釈行、空行を含む)からなる。
コマンド行を拡張する継続行を除き、いずれの場合も行頭の空白は取り除いて処理する。
外部コマンド行は、コマンドライン機能を用いてスクリプトからプログラムを実行する。内部コマンド行は、QSスクリプトに内蔵される特別な機能を呼び出す。
基本的には行単位で、先頭行から順に末尾行へ向って実行していく。コマンドには、複数行で構成できるものもある。これはコマンドによって異なる。
行の拡張の最初の方法は行頭に「+
」「-
」「|
」の記号をつけてコマンドを拡張する。これを記号による継続行と呼ぶ。コマンド行自体を拡張する場合にはこの方法を取ることが多い。
もう一つの方法は、ラベルによる継続行である。ラベルを指定し、そのラベルが現れるまでの行を継続範囲とする。コマンドにデータを与えるために使用することが多い。
+
、-
または|
で始まる行)である場合は、以降の継続行を接続して一行として扱い、実行する。|
)、
入出力のリダイレクト(<
、>
、>>
)機能を提供している。
詳細はここを参照のこと。[ ( 判別式 ) ] (top of) commandline↓
[{+|||-}part of commandline↓]*
[{<<|<<-}
[^|~|=|:]label↓
[データ↓]*
label↓
]
外部コマンド行は通常一行で書くが、次の行の行頭の文字が「+
」、「-
」、あるいは、「|
」であれば、一つのコマンドラインとして実行できる。この拡張した行を記号による継続行と呼ぶ。
さらに、続けて記号による接続行を書けば、それらはひとまとめにコマンド行と扱われる。
先頭に書く記号によって行を追加する方法が少し異なる。
行頭が「+
」の場合は、その次の文字以降が先行行の末尾につながる。
先行行の最後の文字と継続行の間を区切るためには、先行行の行末か、「+
」の後ろに意図的にスペースを挟む必要がある。
行頭が「-
」の場合は先行行と現在行の間に復帰改行(\r\n
)が挟まる。通常はこの形は使用しない。
行頭が「|
」の場合は、「|
」を含めて先行する行に連結される。(|
は、多くの場合、そのまま、コマンドのパイプ連結記述として扱われる)
cat *.* + -p -r |ebは、
cat *.* -p -r |ebと同じ。
cat *.* -p -r |ebも、
cat *.* -p -r |ebと同じ。
外部コマンド行のコマンドライン、あるいは記号による継続行の次の行の行頭に「<<
」か、「<<-
」があると以降の行を外部コマンドに標準入力として与えて実行する。
次のように書く。
<< label
....
....
label
labelだけの行(ラベル行)が現れる直前の行までを標準入力に与える。
labelを省略する空行がラベル行になる。
ファイル末に達した場合は、そこまでがデータの内容である。
次のようにlabelの前に「^
」を書くと、各行をTSEXPRの式として評価し、各行ごとに結果に行末を加えてコマンドに標準入力する。
<< ^label
....
....
label
次のようにlabelの前に「~
」を書くと、各行をバイナリの値を返すTSEXPRの式として評価し、結果を標準入力する。一般的には使用されない。
<< ~label
....
....
label
次のようにlabelの前に「=
」を書くと、各行を引数置換した結果をコマンドに標準入力する。引数置換は一括して行う。
<< =label
....
....
label
次のようにlabelの前に「:
」を書くと、各行を引数置換した結果をコマンドに標準入力する。引数置換は行単位で行う。
<< :label
....
....
label
「<<
」の代わりに、「<<-
」で始めると、入力として与える業は、行頭の空白(タブなども含む)文字を取り除いたものになる。また、このとき、ラベル行の判定時も行頭の空白を除去して判定する。この記法を用いれば、入力データにインデントをつけて見やすく記述できる。
行頭に「(
」「)
」で囲んでTSEXPRによる判別式を書ける。
判別式は論理値を返す式で、戻り値が真ならば外部コマンドを実行する。偽ならば実行しない。
空白以外の文字がない行は空行として、実行時には、何もせず、次の行へ制御を移す。
記号による継続行は空行があると終了する。
注釈行は、「;
」で始まる。
実行時には、何もせず、次の行へ制御を移す。
記号による継続行は注釈行があると終了する。
処理内容のメモや、解説に使用すると良い。
現在は、「+
」、「-
」、「#
」、「:
」
で始まる行も注釈行扱いしている。
行頭の「+
」、「-
」は継続行を表すので、継続行でない位置に現れた場合に注釈行扱いをしている。
「#
」で始まる行は多くのコンピュータ言語で注釈あるいは、
特別なオプションの指定のために使用されているので、踏襲して注釈扱いにしている。
将来、同様な機能を搭載するかもしれない。
「:
」で始まる行は QSMENU.EXE
のメニュー記述コマンドである。
この行を注釈扱いすることで、QSMENU.EXE
のメニュースクリプトを、QS.EXE
などで実行出来るようにしている。
以下の内部コマンドが使用できる
最も基本的なフロー制御は、終了処理である。 | ||||||||||||||||||||
END
[ ReturnCode
[ Message
[ Title
[ Mark
]
]
]
]
| ||||||||||||||||||||
この行で実行を終了する。 ReturnCode(戻り値)は自然数。 ReturnCode を記述しないと、現在の ReturnCode を返す。 Messageを記述すると終了の前にメッセージボックスを表示する。 titleはメッセージボックスのタイトル。省略すると、"QSSCRIPT"と表示する。Markはメッセージボックスに表示するアイコンで、"warn"、"info"、"qeustion"、"stop"のいずれかを指定する。指定しなければマークは表示しない。 ReturnCode / Message / Title / Mark は ! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
繰り返し処理のために数種のコマンドが用意されている。これらは、範囲を明確にするために開始コマンド終了コマンドのペアで用いられる。 「 WHILE / ENDWHILE 」「DO / UNTIL 」「DO / WHILE 」「FOR / ENDFOR 」がそれである。
このループ内では「BREAK 」コマンドを使って最も内側の繰り返し処理を中断できる。
| ||||||||||||||||||||
WHILE boolexpr
| ||||||||||||||||||||
boolexpr が真の間、 WHILE と ENDWHILE の間を繰り返す。BREAK コマンドで繰り返しを中断し、ENDWHILE の次に制御を移す。boolexpr は、TSEXPR の式。 | ||||||||||||||||||||
DO
| ||||||||||||||||||||
継続の判断がブロックの最後にある繰り返し。一度は実行しようとする。 BREAK で繰り返しを中断する。DO .... UNTIL boolexpr : 条件が成立するまでループ。DO .... WHILE boolexpr : 条件が成立する間はループ。boolexpr は、TSEXPR の式。 | ||||||||||||||||||||
FOR paraname IN [ value ]* または FOR paraname または FOR paraname ON [ arrayname ]
| ||||||||||||||||||||
列挙の繰り返し。三種の記法があり、列挙するものが異なる FOR IN の場合 FOR の場合 FOR ON の場合 BREAK コマンドで繰り返しを中断する。paraname以降は ! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
BREAK
| ||||||||||||||||||||
WHILE / DO / FOR コマンドの繰返しを中断する。
| ||||||||||||||||||||
条件分岐コマンドは、「IF / ENDIF 」と「SWITCH / ENDSWITCH 」がある。
| ||||||||||||||||||||
IF boolexpr
| ||||||||||||||||||||
条件分岐処理。 boolexpr は、TSEXPR の式。 ELSEIF の代わりに ELIF 、ENDIF の代わりに FI を使える。
| ||||||||||||||||||||
SWITCH
| ||||||||||||||||||||
多条件分岐。 CASE の後ろにある式のいずれかが真になると CASE ... ENDCASE の間の文を実行する。CASE ... ENDCASE は順に評価され、最初に真になったものだけが実行される。
どの CASE ... ENDCASE も実行されない場合、ELSE .... ENDELSE があれば、それを実行する。
boolexpr は、TSEXPR の式。
| ||||||||||||||||||||
名称をつけたサブルーチンを呼び出せる。サブルーチンの名称は英字で始まり、英数字からなる文字列で表す。 | ||||||||||||||||||||
SUB name
| ||||||||||||||||||||
サブルーチンを登録する。サブルーチンの最後の RETURN は書かなくても良い。 | ||||||||||||||||||||
CALL name
| ||||||||||||||||||||
サブルーチンを呼び出す。
| ||||||||||||||||||||
RETURN
| ||||||||||||||||||||
サブルーチンから戻る
| ||||||||||||||||||||
指定のスクリプトを現在の環境で実行する機能がある。 | ||||||||||||||||||||
SRC { filename +} 記号による継続行が使える。 {+|-} .....
| ||||||||||||||||||||
指定のスクリプトを現在の環境で実行する。
複数のスクリプトを指定すると、順番に実行する。 継続行が使用できる。 | ||||||||||||||||||||
SRCLINE { line +} 記号による継続行が使える。 {+|-} .....
| ||||||||||||||||||||
パラメータをスクリプトとして現在の環境で実行する。
複数のパラメータを書くと行として順に連結してから実行する。 継続行が使用できる。 | ||||||||||||||||||||
TSEXPR 式を評価するだけの行を書ける。 | ||||||||||||||||||||
_ [TSEXPR式;]*
| ||||||||||||||||||||
先頭が「 _ 」で始まる行は、TSEXPR の式として評価するが、式の値は利用しない。式は末尾に「 ; 」をつけて複数書くことが出来る先頭に「 _ 」がある行の連続は、先頭の「_ 」を取り除いて連結する。各行末には行末コード「LF 0x0a」を付加する。TSEXPR での変数、配列、連想配列などはスクリプトのホストプログラムの範囲で有効なので、式代入やファイル操作などの 細かい部分を TSEXPR を使用して行える。 式の中では SPOOL() が使え、標準出力への直接出力を行う。
| ||||||||||||||||||||
_<< [TSEXPR式;]*↓
| ||||||||||||||||||||
先頭が「 _<< 」で始まる行から、「_>> 」だけの行、または、ファイル末までの間はTSEXPR式の連続として扱う。TSEXPR式は、「 ; 」で区切って複数書ける。各行末には行末コード「LF 0x0a」を付加する。式は評価するのみ。TSEXPR での変数、配列、連想配列などはスクリプトのホストプログラムの範囲で有効なので、式代入やファイル操作などの 細かい部分を TSEXPR を使用して行える。 式の中では SPOOL() が使え、標準出力への直接出力を行う。
| ||||||||||||||||||||
カレントフォルダーの設定、実行パスの設定に関わるもの | ||||||||||||||||||||
CD dirname
| ||||||||||||||||||||
カレント・ディレクトリを切替える。 切替えることが出来ない場合は、エラーを表示して、実行を直ちに終了する。 dirname は ! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
PATH path
| ||||||||||||||||||||
パス(環境変数 PATH )を設定する。path は ! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
ADDPATH {path}*
| ||||||||||||||||||||
パス(環境変数 PATH )を追加する。path は一つ以上書く。path が既に存在すれば追加しない。既存のパスの後ろに追加する。 path は ! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
環境変数の設定、クリアなど | ||||||||||||||||||||
SETENV [ envname value ]+
またはSETENV :[prefix] [value]*
または SETENV . [value]* いずれの場合にも記号による継続行が使える。 {+|-} .....
| ||||||||||||||||||||
環境変数をセットする。三種類の記法により機能が異なる。 SETENV [ envname value ]+
変数名、値の組で指定する書き方。複数組み指定できる。 SETENV :[prefix] [value]*
最初の引数が「 SETENV . [value]*
最初の引数が「 いずれの記法でも継続行を使用できる
継続行の先頭が「 | ||||||||||||||||||||
SETVAR envname 式 または SETVAR . 式 いずれの場合にも記号による継続行が使える。 {+|-} .....
| ||||||||||||||||||||
SETVAR envname 式
SETVAR . 式
環境変数名を「
式の中では | ||||||||||||||||||||
SETARG [ value ]+ 記号による継続行が使える。 {+|-} .....
| ||||||||||||||||||||
環境変数QS_ARGnに順番に値をセットする。 継続行の先頭が「 | ||||||||||||||||||||
UNSET [ envname ]+
| ||||||||||||||||||||
環境変数をクリアする。 envname は ! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
SETRESULT
| ||||||||||||||||||||
現在の戻り値を環境変数 QS_RESULT に設定する。この変数は、現在のスクリプトより上位からは見ることが出来ない。 | ||||||||||||||||||||
SHIFT [ シフト数 ]
| ||||||||||||||||||||
環境変数 QS_ARGn に QS_ARGn+シフト数 の内容を移す。(nは1から…)また、 QS_ARGC は減算する。
QSC.EXE を実行しているときの引数シフターとして使用すると便利である。シフト数を省略するとシフト数は 1 。 | ||||||||||||||||||||
スクリプトの行をそのまま、あるいは、TSEXPR式として評価してから標準入力に割り当てて外部コマンドを実行する場合や、複数行に渡ってコマンドラインを書くときに使用する。 現在は、通常のコマンド行で同じ機能を実現できるので、現在はあまり使用しない。 | ||||||||||||||||||||
FEED command_line↓
| ||||||||||||||||||||
継続行を標準入力に割り当ててコマンドラインを実行する。 継続行はコマンド行の次に置き、行頭に + を書いた行の連続である。継続行は行頭の + を除いた残りが標準入力の1行に相当する。このコマンドは、外部コマンドの機能が強化されたため、現在ではほとんど使用しない。 | ||||||||||||||||||||
FEEDEXPR command_line↓
| ||||||||||||||||||||
以下に連続する + で始まる行を TSEXPR として評価し、結果を標準入力に割り当て、コマンドラインを実行する。+ で始まる行が続く限り、各行を式評価してその結果を行として改行コードを付加して標準入力に繰り込む。このコマンドは、外部コマンドの機能が強化されたため、現在ではほとんど使用しない。 | ||||||||||||||||||||
CMDBLK label top_of_command_line↓
| ||||||||||||||||||||
label だけでできる行が現れるまでコマンドラインを拡張し、実行する。 ラベルは、空白以外の文字の連続。 長いコマンドラインを複数行にまたがって記述しやすい。 | ||||||||||||||||||||
HERE label command_line↓
| ||||||||||||||||||||
以下に続く行をデータ行として標準入力に割り当て、コマンドラインを実行する。 データ行の行の終わりは、 label だけの行または、スクリプト末で示す。 ラベルは、空白以外の文字の連続。 このコマンドは、外部コマンドの機能が強化されたため、現在ではほとんど使用しない。 | ||||||||||||||||||||
HEREEXPR label command_line↓
| ||||||||||||||||||||
以下に続く行をTSEXPR式の行とする。各行を TSEXPR として評価し、標準入力と割り当て、コマンドラインを実行する。 TSEXPR 行の行の終わりは、 label だけの行または、スクリプト末で示す。 ラベルは、空白以外の文字の連続。 このコマンドは、外部コマンドの機能が強化されたため、現在ではほとんど使用しない。 | ||||||||||||||||||||
HEREBLK label top_of_command_line↓
| ||||||||||||||||||||
label だけでできる行が現れるまでコマンドラインを拡張する。
さらに、以下に続く行を標準入力と割り当て、コマンドラインを実行する。 継続行の行の終わりは、label だけの行または、スクリプト末で示す。 ラベルは、空白以外の文字の連続。 外部コマンドの標準記法と大差がないが、長いコマンドラインはこちらの方が書きやすいかもしれない。 | ||||||||||||||||||||
HEREEXPRBLK label top_of_command_line↓
| ||||||||||||||||||||
label だけでできる行が現れるまでコマンドラインを拡張する。
さらに、以下に続く各行をTSEXPRとして評価し、標準入力と割り当て、コマンドラインを実行する。 継続行の行の終わりは、label だけの行または、スクリプト末で示す。 ラベルは、空白以外の文字の連続。 外部コマンドの標準記法と大差がないが、長いコマンドラインはこちらの方が書きやすいかもしれない。 | ||||||||||||||||||||
スクリプトの行をデータとして、ファイルや環境変数に保存できる。 | ||||||||||||||||||||
TXT [:]name↓
| ||||||||||||||||||||
以下に続く + で始まる行を指定のファイルに保存する。名称の先頭に「 : 」をつけると指定の環境変数に保存する。データの先頭の + の次の文字から行末までを行として出力する。スクリプト内でコマンドに与えるパラメータやスクリプト、あるいは初期データなどを記述する際に便利である。 name は ! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
HERETXT label [:]name↓ または HERETXT label (tsexpr) [ option ]*↓
| ||||||||||||||||||||
以下に続くデータ行を処理する。処理は、ファイル出力、環境変数設定、TSEXPR 評価の三種類がある。 HERETXT label ファイル名
継続行の内容をファイルに出力する。 HERETXT label :環境変数名
継続行の内容を環境変数に設定する。 HERETXT label (TSEXPR) [ 引数 ]*
継続行の内容と引数を参照しながら、TSEXPR 式を評価する。
SPOOL() が使え、標準出力への直接出力を行う。
| ||||||||||||||||||||
Windows プログラムや、Dos コマンドを特殊な形で起動するコマンド | ||||||||||||||||||||
DI commandline
| ||||||||||||||||||||
コマンドラインをそのまま実行する。 パラメータ展開機能を使用しないで、コマンドラインはそのままプログラムに引き渡される。 パイプライン連結などもサポートしない。 | ||||||||||||||||||||
EX (top of) commandline↓ | ||||||||||||||||||||
コマンドラインをパラメータ展開してから実行する。 外部コマンドの実行と同様にコマンド行の連結や、データの繰り込みが出来る。 本システムのパラメータ展開機能を備えないプログラムを実行する際にパラメータ展開後のパラメータを与えることが出来る。 また、展開はスクリプト上で行われるので、スクリプト内の変数をコマンドに渡す際に使用できる。 展開は文字列単位で行われるが、文字列の中に、半角スペース、制御コード、あるいは「 '" 」を含む場合と、
長さが0の場合には文字列全体を「"」で囲む。「" 」は「"" 」に変換する。
commandline は # 、! 、@ 、^ 記述が可能。
| ||||||||||||||||||||
EA (top of) commandline↓ | ||||||||||||||||||||
DOS commandline
| ||||||||||||||||||||
DOS窓(CMD.EXE)を利用してコマンドラインをそのまま実行する。 パラメータ展開をせず、コマンドラインはそのまま DOS 窓のコマンドラインに引き渡される。 | ||||||||||||||||||||
DOSEX commandline
| ||||||||||||||||||||
DOS窓( CMD.EXE )を利用して、コマンドラインをパラメータ展開してから実行する。DOS のコマンドラインをパラメータ展開で記述できる。 展開は文字列単位で行われるが、文字列の中に、半角スペース、制御コード、あるいは「 '" 」を含む場合と、
長さが0の場合には文字列全体を「" 」で囲む。「" 」は「"" 」に変換する。
commandline は # 、! 、@ 、^ 記述が可能。
|
QS_ARGn
の値を返す。n が負ならば、QS_ARGC
の値(パラメータの数)を返す。
!
記述、@
記述、^
記述が可能となっている。QS_ARGC
は引数の数、QS_ARG0
はスクリプト名、QS_ARG1
は最初の引数、以下、QS_ARG2
…と続く。SHIFT
が設けられている。
例えば、引数のすべてに同一のファイル処理を施す場合は、次のように書けばよい。
while isenv("QS_ARG1") cat !@QS_ARG1 | EB shift endwhile