command [ parameter ]*
[ | command [ parameter ]*]*
[ <input_filename]
[ >output_filename
| >>output_filename]
|
で繋ぐと、前方のコマンドの出力を後方のコマンドに与えることになる。
コマンドはこの方法で、(実用的な範囲で)複数連結できる。<
の後にファイル名を書いて一番最初のコマンドの入力とし、
>
または >>
の後にファイル名を書いて一番最後のコマンドの出力先とする。
出力に関しては、新規にファイルを作成する場合は>
を使用し、
既存のファイルに追加する場合には>>
を使用する。<
)で指定したファイルからデータを受け取る。>
、 >>
)で指定したファイルへデータを書き込む。|
で区切って、複数のプログラムを記述できる。
このとき、|
で隣り合わせたプログラム同士は、
前方のプログラムの標準出力と後方のプログラムの標準入力が繋ぎ合わされる。
この接続をパイプライン接続という。WINDOWSの無名パイプ機能による接続 |
コマンドライン上のコマンドはすべて同時に起動される。
ディスク上に作業ファイルは不要。従って、一般的に処理は高速になる。
システム負荷は大きい。 一般的にはこの方法で使用する。 |
中間ファイルによる接続 |
コマンドライン上のコマンドは先頭から順に起動され、実行する。
ディスク上に作業ファイルが必要。従って、一般的に処理は遅い。
システム負荷は軽い。 |
MS-DOSのパイプライン機能による接続 |
コマンドラインそのものをMS-DOSのコマンドラインとして与える。
MS-DOS形式のプログラムや、コンソールコマンドを利用できる。 Windows 98では機能しない。 一般的には使用すべきではない。 |
<filename
の形で、
コマンドラインに一つだけ書くことが出来る。
>filename |
ファイルは新規に作成され、 ファイルの内容は、最後のコマンドの出力そのものとなる。 |
>>filename |
既存のファイルを指定する。 指定したファイルの後ろに最後のコマンドの出力を追加する。 |
cat >nul
cat *.txt >output.lst
cat >output.txt *.txt
>output.txt cat *.txt
CAT *.TXT >"output select.lst"
"
、'
でまとめ、
先頭に特殊な文字 !
、^
、@
、#
が
ある場合の間接記述の展開をする。
-
があるパラメータをオプション指定として解釈する。
0
を返すことになっているので、これを踏襲することが好ましい。
特別な場合を除き、エラーの場合は0
を返し、それ以外では1
を返す。
戻り値に意味を持たせた場合でも、エラー、あるいは、不成功以外では1
以上を返す。!
記述群、^
記述群、@
記述群が有効である。
CAT ABC DEF
CAT
がコマンド名、ABC
と DEF
が
コマンドに与えるパラメータとなる。
'
」、「"
」)で囲むと、その間を一つのパラメータとみなす。CAT "ABC DEF" 'VALUE FILE'
ABC DEF
」と「VALUE FILE
」をパラメータとすることが出来る。|
やリダイレクトに使用する
<
、>
等の文字もパラメータやコマンド名に含めることが出来る
( ">ABC"
や "A|B"
は、それぞれ、>ABC
と A|B
)。"ABC""DEF" | → | ABC"DEF |
"ABC'DEF" | → | ABC'DEF |
'ABC''DEF' | → | ABC'DEF |
'ABC"DEF' | → | ABC"DEF |
これは、MSDOS のコマンドラインとほぼ、同じ仕様になっている。
コマンドに沢山のパラメータを与えたり、あるいは、パラメータのリストをファイルに
置いておく場合などにこれらの記述方法を利用する。また、コマンドの実行結果を
パラメータとしたり、環境変数の内容をパラメータとすることも出来る。
いくつか例示する。
ここで concat はコマンドラインに書かれたテキストファイルを連結するコマンドである。
ファイル FILE.LST の内容を
CONCAT !FILE.LST >OUTPUT.TXT
FILE.LST
で指定されたファイルを連結する。
CONCAT SAMPLE1.TXT SAMPLE2.TXT >OUTPUT.TXT
CONCAT !@TSTEMP >OUTPUT.TXT
TSTEMP
に示されたファイルを出力CONCAT SAMPLE1.TXT >OUTPUT.TXT
CONCAT !:TSTEMP >OUTPUT.TXT
TSTEMP
に示されたファイルをファイルリストと考え、
そこに書かれた名称のファイルを連結して出力。CONCAT !FILE.LST >OUTPUT.TXT
CONCAT SAMPLE1.TXT SAMPLE2.TXT >OUTPUT.TXT
CAT *.C | CONCAT !! >OUTPUT.TXT
CAT
コマンドが出力した内容をファイルリストとして扱う。
これはパイプラインによるパラメータ展開の例。CONCAT "!#CAT *.C" >OUTPUT.TXT
CAT
コマンドが出力した内容をファイルリストとして扱う。
これは、実行によるパラメータ展開の例。
@記述、!記述、^記述、#記述によるパラメータ展開は、引用符の処理の後に行われる。
従って、"@@
" は単独の @@
、"@listfile
" は @listfile
と同じ扱いとなる。
パラメータに空白を含む場合は、@
、#
、!
、^
を含めて引用符で囲んで置くと良い。
また、@
、#
、!
、^
で始まるファイル名をパラメータとする場合(つまり展開したくない場合)、
その記号を二つ重ねることで記述できるが、あまり、推奨できない。
(例えば、!ABC.LST
というファイル名を書く場合は、!!ABC.LST
と書く)。
間接指定は種類が多く、煩雑だが、通常は、「!!
」(標準入力からのパラメータ取得)「!filename
」(ファイルからのパラメータ取得)ぐらいを覚えておけばよい。それ以外は、必要に応じて参照するだけで十分である。
![prefix]filename |
ファイルの各行 |
!{[]|()}filename |
行区切りを用いたブロック読み込み |
!! |
標準入力の各行 |
!@[prefix]envname |
環境変数の内容(ひとまとめ) |
!@:[prefix]envname |
環境変数の内容(行ごと) |
!@ |
環境変数QS_ARGn(n=1...)のすべての内容 |
!:[prefix]envname |
環境変数の内容が示すファイルの各行 |
!=template |
引数置換(ひとまとめ) |
!:=template |
引数置換(行ごと) |
!#[prefix]commandline |
コマンドラインの実行結果の各行 |
!^expr |
TSEXPR評価(ひとまとめ) |
!^:expr |
TSEXPR評価(行ごと) |
!^^expr |
TSEXPR評価のみ |
! |
以降 ! 記述無効 |
^[prefix]filename |
ファイルのタブ項目 |
^^ |
標準入力のタブ項目 |
^:[prefix]envname |
環境変数の内容が示すファイルのタブ項目 |
^#[prefix]commandline |
コマンドラインの実行結果のタブ項目 |
^=[prefix]pattern |
ファイル名展開 |
^![prefix]pattern |
フォルダー名展開 |
^@[prefix]pattern |
フォルダー名/ファイル名展開 |
^ |
以降 ^ 記述無効 |
@filename |
ファイルの区切展開 |
@@ |
標準入力の区切展開 |
@!envname |
環境変数の内容を区切展開 |
@:envname |
環境変数の内容で示されたファイルを区切展開 |
@#commandline |
コマンドライン実行結果の区切展開 |
@=str |
文字列を正規表現展開する |
@^comment |
何もしない。コメント記述に用いると良い。 |
@^ |
以降の間接展開をすべて無効にする |
@: |
以降の区切展開で再展開を無効にする |
@! |
以降の区切展開で再展開を有効にする |
@ |
以降 @ 記述無効 |
#[prefix]filename |
ファイルの内容を全部ひとまとめ |
## |
標準入力の内容を全部ひとまとめ |
#:[prefix]envname |
環境変数で示されたファイルの内容全部ひとまとめ |
#![prefix]commandline |
コマンドライン実行結果を全部ひとまとめ |
# |
以降 # 記述無効 |
![prefix]filename
| ||||||||||
最も良く使う形式。
file.lst の内容が、次のような行で構成されているものとする。
abc def
second line
| ||||||||||
!{[]|()}filename
| ||||||||||
ファイルの一行目を行セパレータとして読み込み、以降、行セパレータで区切られた複数行を一つのパラメータとして扱う。 パラメータ内では行間を行末(0x0a)で区切る。パラメータ内の最後の行には行末は付かない。 !()filenameの形式で記述すると、セパレータの連続はひとまとめに扱われる。 ![]filename、!()filenameのほかに!{}filenameも認識するが、将来の互換性のため、!{}filenameは使用しないこと。 | ||||||||||
!!
| ||||||||||
| ||||||||||
!@[:][prefix]envname
| ||||||||||
環境変数の内容が複数行であったときの取り扱いで記法が異なる。
プリフィックス修飾機能がある。
| ||||||||||
!@
| ||||||||||
環境変数QS_ARGn(n=1...)のすべての内容をパラメータとする。 | ||||||||||
!:[prefix]envname
| ||||||||||
プリフィックス修飾機能がある。
| ||||||||||
![:]=template
| ||||||||||
引数置換には引数指定は出来ないが、環境文字列の差込や、TSEXPR の差込などができる。置換の結果が複数行になった場合の取り扱いの違いで、異なった記法がある。
引数置換において、番号パラメータ( %n )は n が負でなければ
| ||||||||||
!#[prefix]commandline
| ||||||||||
ここに書くコマンドラインは、標準入力を処理せず、テキストを標準出力し、さらに、出力量は常識的な範囲であることが望ましい。
| ||||||||||
!^[:|^]expr
| ||||||||||
複数行の結果が得られたときの扱い方と、評価だけする方法のために、異なる記法がある。
TSEXPRの中では以下のアプリケーション変数が有効。式中で結果の扱いを変更できる。
| ||||||||||
!
| ||||||||||
以降に現れた |
^[prefix]filename
|
プリフィックス修飾機能がある。 |
^^
|
|
^:[prefix]envname
|
プリフィックス修飾機能がある。
|
^#[prefix]commandline
|
プリフィックス修飾機能がある。 |
^=[prefix]patten
|
パターンを展開したそれぞれのファイル名が項目となる。 プリフィックス修飾機能がある。 |
^![prefix]patten
|
パターンを展開したそれぞれのフォルダ名が項目となる。 プリフィックス修飾機能がある。 |
^@[prefix]patten
|
パターンを展開したそれぞれのフォルダ名またはファイル名が項目となる。 プリフィックス修飾機能がある。 |
^
|
以降に現れた |
ファイル、標準入力(前のコマンドの出力)あるいは、実行結果の内容から、パラメータを取り出す。
すなわち、空白を区切りとしてパラメータを取り出し、引用符の処理もコマンドラインの処理のように行う。また、展開した項目に間接展開の記述があれば、間接展開する。(再展開)
コマンドのパラメータをそのまま、ファイルに格納などする場合に便利である。
引用符は、行を跨いで使用できるので、改行を含むパラメータの指定が可能である。
以下の11種類の記述がある。
再展開の機能では、展開したパラメータに間接展開があれば、展開する。この処理は再帰的に繰り返される。
単独の@:
を指定すると、以降の区切展開で再展開を行わない。単独の@!
を書くと、以降の区切り展開で再展開を行うように指定できる。
通常のパラメータの展開の最初は、区切展開で再展開を行う状態である。
@filename
|
|
@@
|
|
@!envname
|
|
@:envname
|
|
@#commandline
|
|
@=string
|
この記法は、残念ながら区切り展開と関係がない。 |
@^comment
|
この記法は、残念ながら区切り展開と関係がない。 |
@^
|
|
@:
|
|
@!
|
|
@
|
以降に現れた@記述は、記述そのものがパラメータとなる。 |
ファイルあるいは標準入力(前のコマンドの出力)の内容全てを一つのパラメータとする。
パラメータが複数の行から構成されるが、その取扱はコマンド自体の仕様による。
ほとんどのコマンドではこの記述法は使用できない。
スクリプトやテンプレートなど、
複数行からなるパラメータを処理するに使用するために設けられた機能である。
以下の5種類の記述がある。
#[prefix]filename
|
|
##
|
|
#:[prefix]envname
|
|
#![prefix]commandline
|
|
#
|
# 記述は、それ自身がパラメータとなる。
|
オプションの引数として結果を使用する場合を考慮して、
文字列をパラメータの前に付加する機能がある。
環境変数名の前に括弧でくくった文字列( prefix
)を書くと、
その文字列をパラメータの値の前につけてる。
括弧は、{}
、[]
、()
の組で、
開き括弧、閉じ括弧をそれぞれ対応させて書く。
文字列の中に閉じ括弧と同じ文字を入れる場合は閉じ括弧を二つ重ねる。
文字列に含まれない括弧を用いれば、閉じ括弧の重ね書きの機能を使用する必要は無い。
オプション解釈は、パラメータ展開の後に行われる。
コマンドにより、オプション解釈が存在しないものもある。
ここで記述するオプション解釈は、コマンドでのオプション記述をある程度の一貫性を持って、
提供するために定められている。
オプションの指定は、パラメータのうち、先頭が「-
」で始まるパラメータである。
-A、-B、-Ofilename 等のように英数字一文字でオプションの種類を指定し、
大文字小文字は判別しないのが習慣となっている。
オプション指定自体はパラメータの一つなので、空白を含まず、一続きに書く。
また、オプション指定自体の中に空白が含まれる場合には全体を引用符で囲めば良い。
上述の!記述の場合には、この必要は無い
(1行の先頭が -
で始まれば、その行全体が一つのオプション指定となる)。
先頭に -
を含むファイル名などをオプションと解釈させないために、
以下の面倒くさい機能が提供されている。通常は、考慮しなくても良い
( -
をファイル名に含めなければ良い)。
-
を先頭に含むパラメータをオプションと解釈させないためには、
-
を余分に書く。--ABC.TXT
は、-ABC.TXT
と解釈され、オプションとして扱わない。-
を単独で書くと、それ以降のパラメータは、オプションとして取り扱わない。FILE.LST
の中にあるファイル名のリストの先頭に -
があるかもしれない場合、
CONAT -OOUTPUT.TXT - !FILE.LST
と書けば良い。オプションが必要な場合は、この例のように、-
よりも前に書く必要がある。
本システムのプログラムの多くは、実際には WINDOW を開く必要がない。
しかし、実行状況の確認や、強制終了の便宜のために、
WINDOW 処理用のスレッドを特別に作成して実行している。
このため、実際の実行時間を測定すると、プログラム自身の実行時間よりも、
WINDOW の処理に使われる時間のほうが長いことが多い。
特に、スクリプト実行や、繰り返し実行の場合には、これが顕著である。
これに対応するために、明示的にWINDOWを使用しないプログラムは、
環境変数 TS_NOWINDOW
の値を見て、WINDOW を使用しない高速実行モードを持っている。
例えば、QSスクリプトでは以下のように書けば、高速実行モードに入る。
高速実行モードは処理速度が速いが、実行状態をタスクバーでモニターしたり、ALT+F4
で
強制終了させたりできない。ループする可能性のあるスクリプト実行や、
LXTRA
、CXTRA
のようにプログラム自体がパラメータによっては
ループしてしまう場合には、CTR+ALT+DEL
でプログラムを強制終了させる他に、
止める方法がない。
普段は高速実行を行わず、記述したスクリプトや処理に自信があるばあいのみ、高速実行をすると良い。