[ヘルプTop] [戻る]

スクリプトの制御構文

 上級者向けに、スクリプトでちょっとしたプログラムを作成したり、繰り返しの動作や定型業務などをまとめて行うことができます。
 代入/四則演算値の可能な変数と、条件分岐、ラベルジャンプ、処理中断用のコマンドを用意しています。
 以下のコマンド名は大/小文字の区別はありません。

※変数や、As/R用の置換マクロは大/小文字の判定をしますので、混同しないようにご注意ください。
 変数
 対象ファイルの検査
 パス文字列操作
 文字列操作
 ラベルジャンプ動作
 条件分岐
 繰り返し(選択ファイルの数だけ繰り返す/条件が成立する間は繰り返す)
 指定ディレクトリ以下のメニュー表示
 UIダイアログの表示

変数

 コンピュータ言語における変数のような、値の代入可能な置換マクロが使用できます。

変数宣言(Var)

 変数のような使い方ができるようになる、置換マクロの使用を宣言します。
 宣言以降で、値の代入可能な置換マクロとして使えるようになります。

【書式】
Var 変数名[=初期値]
  1. 変数名に、半角スペースと「=」のみ、文法的に含めることはできません。
  2. 演算や判定文字として使用するケースが想定される場合は「,」「!」「^」「:」「&」「+」「-」「*」「/」「%」「\」「<」「>」も避けたほうが良いです。
    (将来、これらの文字は文法エラーの対象とされる可能性があります)
  3. 変数名は、置換マクロの一種ですので大/小文字を区別します。
  4. 数値表記は、10進数と16進数が使用でき、16進数は0xffのようにC言語風の表記になります。(文字列の先頭が「0x」かどうかで判定しています)
     16進数を10進数に変換するのは、代入/四則演算/if文の判定時に行われます。
  5. 制御コマンドおよび、将来実装される可能性のある予約語は変数名として使用できません。
    (制御コマンド:var,if,else,endif,goto,exit,for,next,continue,break,do,while,debug)
    (将来の予約語:skip,stop)
  6. システム置換マクロや、固定の定義、環境変数を、変数として上書きすることもできますがイレギュラーな動作をしてしまう場合がありますのでご利用の際には十分ご注意ください。
  7. 初期値を省略した場合は、空文字がセットされます。
  8. 初期値には即値、環境変数、各種の置換マクロ、入力ダイアログ置換マクロ、メッセージボックスの戻りマクロ、外部コマンドのリターンコード/エラーコード格納コマンドが使用できます。
  9. 同じ変数名を2回以上宣言することはできません。
  10. Var宣言しないで値を代入しようとすると、有効行とみなされず未処理になります。
    CheckGrammarコマンドを使用し、デバッグモードにするとエラー表示されます。
  11. 既に宣言されている変数名に含まれる変数名や、既に宣言されている変数名を含んでいる変数名を宣言することはできません。
    変数名の前後を「#」や「$」などで括るルールにして開始と末尾を明確にするとか、変数名全体がユニークになるような名称を使用するようにして運用してください。
    含有エラーは、変数名の置換ネストが発生しないようにして、デバッグの手間を省く目的で設けられています。
  12. 変数の展開は、最大で10回の展開を行います。
    例えば「a[a[a[a[0]]]]」のような4階層の入れ子の変数も展開されます。
【名称含有のNG例1】
Var test = OK
Var test1 =「test」が含まれており、意図していないであろう置換が発生しうるため許されません

【名称含有のNG例2】
Var test1 = OK
Var test =「test」が含まれており、意図していないであろう置換が発生しうるため許されません

【OK例】
Var test1 = OK
Var test2 = これもOK

【ユニークになるような変数宣言の例】
Var $file$ = 任意の置換マクロが作成できます
CommandLineOption = $file$
Run=%WINDIR%\notepad.exe

【ユニークにならない場合の失敗例】
Var file = 任意の置換マクロが作成できます
CommandLineOption = ?selfile?
Run=%WINDIR%\notepad.exe
※?selfile?は選択ファイル名に変換するシステム置換マクロですが、「file」変数宣言により一部の記述が置換され、選択ファイルの置換マクロではなくなっています。
これは、CommandLineOptionに「?sel任意の置換マクロが作成できます?」と展開されてしまう事例です。

配列宣言

 変数宣言の延長で、配列を宣言することができます。
 やや上級者向けの機能で、後述の繰り返し機能(for/nextやdo/whileなど)と合わせて使われることが多いかと思います。
 変数の「識別部分」に加えて半角の[と]で括られた添え字の「数字」で構成されます。

【書式】
Var 変数の識別部分[確保する変数の数]
【例】
Var hoge[10]
 →hoge[0]~hoge[9]まで10個変数領域を確保
【注意事項】
  1. []が閉じてない場合や、添え字を示す[]の後ろに文字が続く場合は配列とみなされず1つの変数として認識しますので、ご注意ください。
  2. 配列の宣言で代入式は使えません
     var a[10]=テキスト
     →a[0]~a[9]しか割り当てていないので未定義エラーになる
  3. 代入の際の添え字のスペースは除去して格納されますが、ifやwhileなどの条件式や、置換を行う際にはスペースを除去してください。
    a[   0 ] = ほげ
     →a[0]に格納
    if a[   0 ] == ほげ
     →文字列の「a[   0 ]」として認識されるため、変数として展開されない
    MessageBoxOk=a[   0 ]
     →文字列の「a[   0 ]」として認識されるため、変数として展開されない
    MessageBoxOk=a[0]
     →変数が展開されて「ほげ」が表示される
  4. 宣言時の添え字に0を指定した場合は、後述の連想配列の宣言と見なされるのでエラーになりません。
  5. 宣言時には固定値を指定してください。変数は使用できません。
  6. 一度宣言した配列のサイズは変更できません。
  7. 値を読み出す場合の添え字には、変数が使用可能です。
    【例】
    var a[10]
    a[0] = 0個め
    a[1] = 1個め
    var z = 0
    MessageboxOk=a[z]
    z = 1
    MessageboxOk=a[z]

連想配列宣言

 配列に良く似ていますが、数字ではなく文字列を指定します。
 一般的にはハッシュとかマップとか呼ばれる機能で、インデックスの作成などに利用される技術ですが、配列以上に上級者向けの機能と言えるでしょう。
 変数の「識別部分」に加えて半角の[と]で括られた添え字の「識別するテキスト」で構成されます。
【書式】
Var 変数の識別部分[識別するテキスト]
【例】
Var 田中[一郎] = 21
Var 田中[花子] = 24

【注意事項】
  1. 代入の際の添え字のスペースは除去して格納されますが、ifやwhileなどの条件式や、置換を行う際にはスペースを除去してください。
    a[   hoge ] = ほげ
     →a[hoge]に格納
  2. 値を読み出す場合の添え字には、変数が使用可能です。
    var a[ほげ]=あああ
    var a[まげ]=いいい
    var z = ほげ
    MessageboxOk=a[z]
    z = まげ
    MessageboxOk=a[z]

入力ダイアログの入力内容の値を格納

 入力ダイアログを表示し、その入力内容を格納します。
 キャンセルを押下した時は、空文字を格納します。
 メッセージが長すぎる場合は表示が途中で切れます。
 入力初期値を省略した場合は、前回の入力内容を覚えますが本体終了時に喪失します。

【書式】
Var 変数名=<入力タイプ>,メッセージ[,入力初期値]

入力タイプ
・Input:フリー入力ダイアログ
・InputFile:ファイル入力ダイアログ(ファイル選択ボタン付き)
・InputDir:フォルダー入力ダイアログ(フォルダー選択ボタン付き)

【例】
var $input1$ = Input,フリー入力ダイアログなので適当に入力してください,初期値は省略できます
var $input2$ = InputFile,ファイル入力ダイアログです
var $input3$ = InputDir,フォルダー入力ダイアログです,c:\windows

入力系置換マクロの使用例

 ?any?、?anyfile?、?anydir?などの入力系置換マクロを用いてダイアログ画面から値を代入することができます。
 入力ダイアログよりも自由度は高いのですが、メッセージを指定することができません。
 入力直後に置換されるため、入力内容のエラーチェックなどを行うことができません。

【例】
Var $初期化時に入力$ = ?any?
Var $入力内容をダブルクォーテーションで括る$ = "?any?"
Var $hoge$
$hoge$ = ?AnyDir? ?any? ?anyfile?
MessageBoxOK=$初期化時に入力$
MessageBoxOK=$入力内容をダブルクォーテーションで括る$
MessageBoxOK=$hoge$

外部コマンドのリターンコード/エラーコードの取得

 外部コマンドを実行し、その戻り値を代入することができます。
※プロセスの生成なので、vbsやwshなどのコマンドを直接扱うことはできません。
 スクリプトエンジンのコマンドラインオプションとして指定してください。
※Execコマンドも同様に使用できますが、Execコマンドは終了を待たないので、必ず259(OSの返す、実行中であるという意味の値)になります。

【例】
Var $終了コード1$ = Call,C:\Test.bat
Var $終了コード2$ = Exec,C:\Test.bat
MessageBoxOK=$終了コード1$ $終了コード2$

C:\Test.batの内容
----
echo この例ではEXITを使ってますが、copyコマンドなどのエラーコードも使えます
pause
EXIT 1
----

メッセージボックスの戻り値格納

 メッセージボックスを表示させ、その押下ボタンごとの戻り値を受け取ることができます。

【書式】
var 変数=MessageBox,メッセージボックスのタイプ(10進数/16進数での数値),メッセージ本文
 「MessageBox」は大/小文字を区別せず、「,」区切りで3つ以上の値が記述されていることがメッセージボックスとみなされる条件です。
※メッセージボックスのタイプは「その他のスクリプトコマンド」に記載されているMessageBoxコマンドを参照ください。

var 変数=MessageBoxOK,メッセージ本文
 「MessageBoxOK」は大/小文字を区別せず、「,」区切りで2つ以上の値が記述されていることがメッセージボックスとみなされる条件です。
 (戻り値は1しか返しません)

var 変数=MessageBoxYN,メッセージ本文
 「MessageBoxYN」は大/小文字を区別せず、「,」区切りで2つ以上の値が記述されていることがメッセージボックスとみなされる条件です。
 戻り値は6か7しか返しません。また変数への代入の場合は「いいえ」を選択してもスクリプトを終了しません。
※MessageBoxYNは互換性維持のために残されてるコマンドなので、使用を推奨しません。

【例】
Var $初期化時にメッセージ$ = Messagebox,0x126,三択の例
Var $hoge$
$hoge$=Messagebox,1,メッセージ本文2
MessageBoxOK=$初期化時にメッセージ$
MessageBoxOK=$hoge$

変数の四則演算

代入式の四則演算

代入文で渡された値が、全て半角の数字、ピリオド、演算子、スペースのみで構成されている場合に、数式として認識して計算処理を行います。
数式内には、四則演算と剰余算が行え、演算子として+,-,/,*,%の5種類が使用できます。
また計算式の優先順位を指定する方法として、(,)が使用できます。
なお内部は全てdouble(倍精度浮動小数点型)で計算しているので、数式内に小数を含めることが可能です。

【書式】
変数 = 数式の文字列

※前処理として、変数や環境変数などの置換、16進数→10進数に変換されます。
※全て半角の数字、ピリオド、演算子「+,-,/,*,%,(,)」、スペースのみで構成されている場合に、数式として認識されます。
※数式として不整合がある場合は、文法エラーになります。(暗黙の乗算は使用できません)
OK $ans$ =(1/2 + 0.5) * 2
OK $ans$ =(a/b + c) * d(a,b,c,dが変数、bが0でないことが条件)
NG $ans$ =)1/2 + 0.5) * 2(括弧の向きがそろってない)
NG $ans$ =(1/2 + 0.5) ** 2(掛け算の記号が2こ続いている)
NG $ans$ =2(1/2 + 0.5)(暗黙の掛け算記号の省略はできません)
※0による除算(/)、剰余(%)は算術エラーになります。
※計算結果はprintf関数などで使われる"%f"(桁数が未指定の実数表記)で書式化しています。
 有効桁数にはご注意ください。
 なお整数の場合は小数点以下の記述を削除、書式化で付与される余分な末尾の0は削除されます。
例)3.0000000→3、1.3010000→1.301

2項式の四則演算

2つの値のみを計算する目的の書式で、前述の「代入式の四則演算」が実装される前に使用されていたもので、互換性のために残されています。
ただ、文字列連結はこちらにしか存在しておりませんので、ご注意ください。
(変数の置換で代用は可能です)
  1. 変数に数字が格納されている場合は、加減乗除が行えます。(文字列が格納されている場合や空文字は0とみなされます)
  2. 整数演算のみ対応しており、小数点以下は切り捨てられます。
  3. 0で除算を行った場合は、除算の結果も、剰余も0になりますのでご注意ください。
  4. 算術演算で数字の代わりに文字を記述すると、演算子とみなされず代入文となります。
    $test$ = /H("/H"が代入される)
    $test$ = /6($test$を6で割る)
  5. 本演算は、置換マクロ展開後に処理されます。
  6. 通常は行の前後のスペースは除去して処理されますが、文字列連結の場合のみ前後ともスペースが除去されません。
    コマンドラインオプションなどを連結していくような用途を想定しているためです。
演算子
+・・・加算
-・・・減算
*・・・乗算
/・・・除算
%・・・剰余
&・・・文字列連結

【例】
Var $初期値$ = 10
//初期化時に変数同士に代入の例
Var $hoge$ = $初期値$
//変数同士の代入例
$hoge$ = $初期値$
//加算
$hoge$ = + 5
MessageBoxOK=$hoge$
//減算
$hoge$ = - 4
MessageBoxOK=$hoge$
//乗算
$hoge$ = * 10
MessageBoxOK=$hoge$
//除算
$hoge$ = / 2
MessageBoxOK=$hoge$
//剰余
$hoge$ = % 2
MessageBoxOK=$hoge$
//文字列連結サンプル1(スペース、環境変数、置換マクロを埋め込んでいる例)
$hoge$ = & = 1 Answer Text %ProgramFiles% ?NowDir? "?any?"
MessageBoxOK=$hoge$
//文字列連結サンプル2(リストで選択したファイルを、"で括ってスペース区切りした文字列の作成)
var $SelFiles$
for
  $SelFiles$ = & "?selfile?"
next
MessageBoxOK=$SelFiles$

対象ファイルの検査

Exist

 対象が存在するか調べます。
 返される値は、存在する場合は1、存在しない場合は0が格納されます。
【書式】
Var 変数名 = Exist,チェックするファイルパス

【例】
var $Exist$ = Exist,c:\windows

IsDirectory

 対象がフォルダーか調べます。
 返される値は、フォルダーの場合は1、フォルダーでない場合は0が格納されます。
【書式】
Var 変数名 = IsDirectory,チェックするフォルダーのフルパス

【例】
var $IsDirectory$ = IsDirectory,c:\windows

IsFile

 対象がファイルか調べます。
 返される値は、ファイルの場合は1、ファイルでない場合は0が格納されます。
【書式】
Var 変数名 = IsFile,チェックするファイルのフルパス

【例】
var $IsFile$ = IsFile,c:\windows

パス文字列操作

GetPath

 渡された文字列をフルパスのファイル名とみなし、パスの部分を切り出します。
※末尾の\を検索し、それ以前の文字列を切り出します。
【書式】
変数 = GetPath,フルパス文字列
【例】
var $a$ = GetPath,C:\test.txt
「C:\」を格納

GetName

 渡された文字列をフルパスのファイル名とみなし、ファイル名(拡張子を含まない)の部分を切り出します。
※パス分解APIの都合上、文字列が256文字以上の場合は空が返されます。
【書式】
変数 = GetName,フルパス文字列
【例】
var $a$ = GetName,C:\test.txt
「test」を格納

GetExt

 渡された文字列をフルパスのファイル名とみなし、拡張子の部分を切り出します。
※パス分解APIの都合上、文字列が256文字以上の場合は空が返されます。
【書式】
変数 = GetExt,C:\test.txt
【例】
var $a$ = GetExt,C:\test.txt
「.txt」を格納

RemoveLastSeparator

 渡された文字列の末尾に\が付いている場合、これを1つ取り除いた文字列を返します。
※「C:\hoge\\」のように末尾に\記号を2個続けて記述したイレギュラーな文字列の場合も1個しか除去しないことにご注意ください。
【書式】
変数 = RemoveLastSeparator,C:\test.txt
【例】
var $a$ = RemoveLastSeparator,C:\
「C:」を格納

文字列操作

SubString

 指定文字列を指定の位置から指定長の文字を切り出します。
※指定文字列に,が含まれていても正しく切り出せますが、項の数が少ない場合はエラーになります。
【書式】
変数=SubString,開始位置(0基点),切り出す文字数,指定文字列
【例】
var $a$ = SubString,2,3,123456789
「345」を格納

Left

 指定文字列を左から指定した文字数だけ切り出します。
※Ver.10.0.0で追加されたコマンドです。
【書式】
変数=Left,切り出す文字数,指定文字列
【例】
var $text$=123456789
var $a$ = Left,3,$text$
「123」を格納

Right

 指定文字列を右から指定した文字数だけ切り出します。
※Ver.10.0.0で追加されたコマンドです。
【書式】
変数=Right,切り出す文字数,指定文字列
【例】
var $text$=123456789
var $a$ = Right,3,$text$
「789」を格納

Length

 渡された文字列の長さを返します。
【書式】
変数 = Length,テキスト
【例】
var $text$=123456789
var $a$ = Length,$text$
「9」を格納

String

 指定文字列がすべて半角数字でも、文字列として扱います。
※Ver.12.1.4で追加されたコマンドです。
【書式】
変数=String,指定文字列
【例】
var x1 = string,003.0
MessageBoxOK=x1
「003.0」を格納、Stringを使わない場合は数字に変換されて「3」が格納されます。

Padding

 指定文字列の左にゼロ埋めして、指定した文字列で切り出します。
※文字列操作なので、数字で無くても処理できますが、あまり意味はないでしょう。
※Ver.12.1.4で追加されたコマンドです。
【書式】
変数=Padding,切り出す文字列数,指定文字列
【例】
var x1 = Padding,5,15
MessageBoxOK=x1
「00015」を格納。

TrimRight

 指定した文字を、右側から除去します。
※Ver.12.1.4で追加されたコマンドです。
【書式】
変数=TrimRight,除去する文字(1文字),指定文字列
【例】
var x1 = TrimRight,\,\\server\共有\hoge\\
MessageBoxOK=x1
「\\server\共有\hoge」を格納

TrimLeft

 指定した文字を、左側から除去します。
※Ver.12.1.4で追加されたコマンドです。
【書式】
変数=TrimLeft,除去する文字(1文字),指定文字列
【例】
var x1 = TrimLeft,\,\\server\共有\hoge\\
MessageBoxOK=x1
「server\共有\hoge\\」を格納

Find

 検索テキストが走査するテキストに含まれていれば、0から始まる開始位置を返します。
 検索テキストが見つからない場合は、-1を返します。
 検索テキストが空文字の場合は、0を返します。
※Ver.10.0.0で追加されたコマンドです。
【書式】
変数 = Find,検索テキスト,走査するテキスト
【例】
var $text$=123456789
var $45$=45
var $a$ = Find,$45$,$text$
「3」を格納

Replace

 検索テキストが走査するテキストに含まれていれば、置換テキストに全て置き換えます。
 Cランタイムの同種の関数の制限により、あまり大きなテキストを扱うことができません。(テキスト長の上限は11KB前後です)
※Ver.10.0.0で追加されたコマンドです。
【書式】
変数 = Replace,検索テキスト,置換テキスト,走査するテキスト
【例】
var $text$=123456789
var $45$=45
var $a$ = Replace,$45$,ほげ,$text$
「123ほげ6789」を格納

Csv

 カンマ区切りされた検索テキストを分割して、指定した項番号のテキストを返します。
※当然検索テキスト内には「,」カンマも指定できますが、「,」を含んだ項は使用できません。
※項番号は0から始まる数値です。
※分割可能な項の数を超えたり、負の数を指定するとエラーになります。
※Ver.10.0.0で追加されたコマンドです。
【書式】
変数 = Csv,抽出する項番号,走査するテキスト
【例】
var $text$=あ,い,う,え,お
var $No$=4
var $a$ = Csv,$No$,$text$
「お」を格納
var $b$ = Csv,3,あ,い,う,え,お
「え」を格納

クリップボードのテキストを取得する

クリップボードにテキスト形式のデータがあれば取り出します。
テキスト形式以外は一切取り込めませんのでご注意ください。
クリップボードが空であったり、テキスト形式以外であった場合は空文字が返ります。
【書式】
var 変数 = GetClipboardText
【例】
var hoge = GetClipboardText
messageboxok=hoge

クリップボードにテキストをセットする

テキストをクリップボードに保存します。
【書式】
SetClipboardText = 文字列
【例】
クリップボードのテキストをSQLと見なして整形してくれるツール「SQLFix」の前処理として、\t,\r,\nを半角スペースに置換してクリップボードにセットしなおすサンプル
※「SQLFix」はnagavさんが公開されているソフトです。(https://hp.vector.co.jp/authors/VA033418/)
var $text$ = GetClipboardText
$text$ = Replace,\t, ,$text$
$text$ = Replace,\r, ,$text$
$text$ = Replace,\n, ,$text$
SetClipboardText=$text$
CommandlineOption=
OpenMode=0
MultiCommandMode=0
ShiftSilentMode=0
BootDir=1
BootMode=0
Run=(インストール先のフルパス)\SQLFix.exe
※Replaceコマンドの制限で、あまり長いSQL文は途中で切れてしまいます。

ラベルジャンプ動作

 ラベルを定義することで、任意のスクリプト行にジャンプすることができます。
 任意回数のループを作成する場合は、このジャンプ動作とif文を組み合わせて作成します。
 安全装置である、ExitLoopCountのステータス定義コマンドに注意してください。

ラベル定義

 行の末尾が:の場合にラベルとみなされ、Gotoコマンドの飛び先の目印にします。
 ラベル名は大/小文字を区別します。
 ラベル名の文中にスペースを含めることができますが、前後についているスペースは除去されます。
 同名のラベル定義が存在した場合は、スクリプトの実行前にエラーメッセージが表示されてスクリプト解析を中断します。

【書式】
定義するラベル名:

【例】
label name :
("label name"がラベルになります)

Goto

 定義されたラベル行にジャンプします。
 Gotoコマンドの飛び先には固定的なラベル名の他に、変数、環境変数、置換マクロ、入力置換マクロが使用でき、それらを展開後にラベル名として使用することができます。
 ただし展開後に未定義のラベル名になると、その時点でエラー終了するのでご注意ください。
 (?any?などでキャンセルボタンを押された時など特に要注意)

※ラベル名が定義されていない場合はエラーメッセージが表示され、処理を中断します。
※if文とendifの間でGotoコマンドが使われると、全ての階層のifブロックのendifが呼ばれたものとして扱われます。
 そのためif文の中にラベルを記述することはお奨めできません。
※上位の記述へ戻る場合、無限ループにならないようにExitLoopCountの制限回数が適用されます。

【書式】
goto ラベル名

【例】
Var $変数$ = label name
goto $変数$
goto ?any?
goto label name

【NG例】
if $test1$ == 0
LABEL1:
  if $test2$ == 0
    goto LABEL1※1でif文のないendifのエラーになる
  else
    goto LABEL2※1でif文のないendifのエラーになる
  endif
LABEL2:
endif※1

ExitLoopCount

 Goto文で上位階層へ移動する回数の上限を指定します。
 制限を越えるGoto文が出現した時点で、エラーメッセージを表示してスクリプトを強制終了します。

 論理ミスで無限ループしないようにするため安全装置です。
 なお全ての上位行への移動をまとめてカウントするので、ループカウンタにはなりえませんのでご注意ください。
 未設定の場合は5です。

【書式】
ExitLoopCount=許容するループ回数

【ループカウンターより早く終了する例】
ExitLoopCount = 5
Var $カウンタ$ = 0
ループ開始:
$カウンタ$ = +1
if $カウンタ$ != 10
  MessageBoxOK=$カウンタ$
  goto ループ開始
endif

条件分岐

 条件式により、処理を分岐させることができます。

if/else/endif

 条件式が成立する場合、ifとendifの間のスクリプトを実行します。
 条件式が成立しない場合、elseとendifの間のスクリプトを実行します。
 記述が不要な場合はelse節を省略することができます。
 値には、変数、環境変数、定数、固定文字列、入力系置換マクロ、置換マクロが使用できます。
 値1、値2の比較判定には、大/小文字を区別しません。(パス記述なども比較する前提です)


※大小の比較は、両辺とも半角数字(先頭の+‐の符号)の場合のみ数値として比較し、それ以外は文字列として比較します。
 文字列として比較する場合も、一覧の名前順のように数字の大小を認識します。
 全角数字やローマ数字などを使用した場合、負の数が扱えなくなるのでご注意ください。

【文字列比較の優先度の例】
test4 > TEST04 = test04 > test004 > test2 > test01 > test001

【文字コード比較と異なる実例】
300 > 5

【書式】
if 値1 <比較演算子> 値2
 条件式が成立する場合に実行
else
 条件式が成立しない場合に実行
endif

 以下の比較演算子が使用できます。
 ==・・・等しい
 !=・・・等しくない
 <・・・より大きい
 >・・・より小さい
 <=・・・以上
 >=・・・以下
 ^・・・値1が、値2のワイルドカード文字列に一致する
 !^・・・値1が、値2のワイルドカード文字列に一致しない

【例】
var $hoge$=3
if 1 == $hoge$
  MessageBoxOK=1と等しい
else
  MessageBoxOK=1と等しくない
  if 2 == $hoge$
    MessageBoxOK=2だった
  else
    MessageBoxOK=2も違った
    if 3 == $hoge$
      MessageBoxOK=3だった
    else
      MessageBoxOK=3でもない
    endif
  endif
endif

var $FileName$ = test.txt
if $FileName$ ^ *.txt;*.doc;*.text
  MessageBoxOK=ワイルドカードに一致した
else
  MessageBoxOK=ワイルドカードに一致しなかった
endif

var $空文字$
if $空文字$ ==
  MessageBoxOK=空文字です!
endif

繰り返し(選択ファイルの数だけ繰り返す/条件が成立する間は繰り返す)

 繰り返しの命令は2種類存在しており、それぞれ全く動作が違いますので混同しないようにご注意ください。
 for文は特に有用度が高いコマンドですが、やや上級者向けの機能として位置づけられているので、安全装置という意味合いのループ回数の制限はありません。
 100万ファイル選択していると100万回ループしますし、whileで条件式が偽にならないと無限ループします。
 途中で中断はできませんので、どうしても止めたい場合はタスクマネージャーから強制終了させてください。
 また動作テストの際にはScriptTrace.exe(スクリプトのトレーサー)などをご利用ください。

※As/Rは設定の保存時、アプリケーションの終了時以外は、読み取りモードでしかディスクアクセスしないので強制終了に強いアプリケーションですが、強制終了は極力しないように運用してください。
  1. for/next
    リスト上で選択したアイテムの数だけ繰り返します。
    選択アイテムに対する置換マクロが有効になりますので、選択したファイルやフォルダーに対して何らかの処理を行う時に使用します。
    多重ループはできません。
  2. do/while
    指定した条件が成立する間は繰り返します。
    リストの選択状態とは全く無関係に、指定された条件が成立する間繰り返します。
    多重ループが可能です。

選択ファイルの数だけ繰り返す(For/Next/continue/break)

 リストで選択されたアイテムの数だけForとNextの間をループします。
 このループ内では、ファイル選択系の置換マクロが使用できます。
 For-Nextの入れ子(ネスト構造)は、現在は使用できません。(Forの戻り位置は1ヶ所しか覚えません)

■ループ内で使用可能になる、選択ファイル系の置換マクロ
 以下の選択ファイル系の置換マクロが仕様できます。
 他にも環境変数や、入力系置換マクロ、一般置換マクロも使用可能です。
 ?SelFile?,?selfile?,?FileName?,?Name?,?Ext?,?filename?,?name?,?ext?,?selpath?,?SelPath?,?SelParent?

※ループ内で使用する変数は定義済みのものである必要があります。(ループした時に2重定義になるためです)
※選択数が0の場合は未処理になります。
※continueで次の候補でループの先頭に戻り、breakでループを抜けます。

【書式】
For
アクティブタブのリストの選択数だけ繰り返す
Next

【例】
var $FileName$
var $OtherValue$
var $counter$ = 0

if ?SelectedCount? == 0
  messageboxok = 何も選択されてなかったよ!
endif
for
  //ここがFor文の最重要ポイント、選択アイテムをフルパスで”で括って置換するマクロ
  //ファイルが5個選択されていれば、5個が順々に代入されてループする
  $FileName$ = ?SelFile?
  //他の置換マクロも使用できます
  $OtherValue$ = ?NowDir?にある?FileName?を対象にします。もちろん、?any?とか?WEEK?とかのマクロも使えます
  $counter$ = +1

  if $counter$ == 2
    messageboxok = 選択2個目はcontinueしてみる
    continue
  endif

  if $counter$ == 4
    messageboxok = 選択4個目でbreakしてみる
    break
  endif

  //この比較演算子を使って、拡張子を判別して実行コマンドを切り変えるといった応用も可能ですので工夫してみてください
  //ここでは、選択ファイルをシェル実行しています
  messageboxok = $counter$:$FileName$を実行します
  CommandlineOption =
  Shell = $FileName$
next

条件が成立する間は繰り返す(do/while/continue/break)

 whileで指定された論理式が成立する間はdo-whileの間を繰り返し処理します。
 多重ループは無制限で可能ですが、無限ループに陥ると強制終了しか回復方法がないので、利用の際には十分ご注意ください。
※continueでループの先頭に戻り、breakでループを抜けます。

【書式】
do
(繰り返し処理)
while 論理式

【例】
do
  do
    i =+ 1
    j =+ 1
  while j < 3
  j = 0
while i < 9
messageboxok=i,j

指定ディレクトリ以下のメニュー表示(MenuOfDirectory/MenuOfFile)

 指定ディレクトリ以下のディレクトリやファイルを選択するメニューを表示します。
 選択をキャンセルした場合は空文字を返します。
 途中でアクセス権限がないディレクトリが含まれていると、そのディレクトリは遷移/選択できません。
 本体とは別スレッドで駆動するものですから、このメニューはフォーカスを保持しませんのでマウスで操作する前提の機能です。

メニュー位置の指定表示される場所
0メインウィンドウの中央
1メインウィンドウの中央、選択肢の中央を選択
2マウス位置
3メインウィンドウの左上
※0~3以外の数字や文字があると0とみなします。
 また将来、予告なく扱える文字の桁が増える可能性がありますので、ご注意ください。
 (要望があればメニュー定義ファイルで可能な挙動の調整が可能であるためです)

MenuOfDirectory

 ディレクトリを選択するメニューを表示します。
 .[Select Folder]を選ぶと、そのディレクトリを選択したことになります。

【書式】
MenuOfDirectory,<メニュー表示位置>,メニューのルートディレクトリ

MenuOfFile

 ファイルを選択するメニューを表示します。

【書式】
MenuOfFile,<メニュー表示位置>,メニューのルートディレクトリ


【例】
//c:\以下をメニュー表示して、ディレクトリを選択
var $SelectedDirName1$ = MenuOfDirectory,2,c:\
MessageBoxOk = $SelectedDirName1$

//As/Rのインストールディレクトリ以下をメニュー表示して、ディレクトリを選択
var $SelectedDirName2$ = MenuOfDirectory,2,%App_Dir%
MessageBoxOk = $SelectedDirName2$

//現在リストで表示しているディレクトリ以下をメニュー表示して、ディレクトリを選択
var $SelectedDirName3$ = MenuOfDirectory,2,?nowdir?
MessageBoxOk = $SelectedDirName3$

//c:\以下をメニュー表示して、ファイルを選択
var $SelectedFileName1$ = MenuOfFile,1,c:\
MessageBoxOk = $SelectedFileName1$

//環境変数%TMP%以下をメニュー表示して、ファイルを選択
var $SelectedFileName2$ = MenuOfFile,1,%TMP%
MessageBoxOk = $SelectedFileName2$

UIダイアログの表示(SelectDialog)

 スクリプトを分岐させる選択肢を入力するためのUIコマンドです。

SelectDialog

 選択肢のダイアログメニューを表示します。
 選択肢の1個目を選択すると0、2個目を選択すると1、3個目を選択すると2のようにインデックス番号をを返します。
 選択をキャンセルした場合は-1を返します。
 選択肢は最大で20個まで使用可能であり、21個以降は無視されて表示されません。

 「デフォルトフォーカスのインデックス」は省略可能で、省略した場合は0(1個目にデフォルトフォーカス)とみなされます。
 また選択肢の数を超えた場合、負の数、数値変換不能な桁の場合は0が指定されたものとみなします。
 なお文字列が全て数字の場合に「デフォルトフォーカスのインデックス」が指定されたと認識しますので、省略の際の「選択タイトル」の記述にご注意ください。

【書式】
SelectDialog,[デフォルトフォーカスのインデックス,]選択のタイトル,選択肢1,選択肢,選択肢3,・・・


【例】
var $SelectValue$ = SelectDialog,選択してください。,選択肢1,選択肢2,選択肢3
MessageBoxOk = $SelectValue$



関連項目
基本的なスクリプトコマンド
その他のスクリプトコマンド
スクリプトコマンドリファレンス

置換マクロリファレンス
置換マクロ対応表
実行コマンドの違い一覧
定義系コマンド一覧
ウィンドウ制御文字列の書式
復元スクリプト詳細