If var [not] in/contains value1,value2,...

检查变量的内容是否匹配列表中的某项.

if Var in MatchList
if Var not in MatchList

if Var contains MatchList
if Var not contains MatchList

参数

Var

需要被检查的变量名称. 对于 "in" 运算符, 需要准确匹配列表中的某项.
对于 "contains" 运算符, 会更容易形成匹配: 只要列表中的某项作为子字符串包含于 Var 中.

MatchList

逗号分隔的字符串列表, 其中的每个字符串都将与 Var 的内容进行比较以寻找匹配. 在分隔逗号周围的任何空格或 tab 都是有意义的, 这表示它们也是匹配字符串的一部分. 例如, 如果 MatchList 被设置为 ABC , XYZ, 这时 Var 必须包含带有尾随空格的 ABC 或带有前导空格的 XYZ 才形成匹配.

在匹配列表中两个连续的逗号产生单个原义逗号. 例如, 后面的匹配列表会在 string1 的末尾产生单个原义逗号: if Var in string1,,,string2. 同样地, 后面的匹配列表仅包含其中含有一个原义逗号的单个项目: if Var in single,,item. 要在列表中包含空的项目, 那么像这个例子那样把逗号作为首个字符: if Var in ,string1,string2(用于 "contains" 运算符时, 由于在所有字符串中都可以找到空项, 所以空项将总是会形成匹配).

因为 MatchList 中的每一项并不是作为独立的参数, 所以此列表可以完整的包含在一个变量中. 事实上, 如果此列表的长度超过 16383, 那么列表的全部或部分必须包含在变量中以变量表示, 因为这个长度是任何脚本行的最大长度. 例如, MatchList 可以由 %List1%,%List2%,%List3% 组成, 其中的每个子列表包含了用来匹配词组的一个大的列表.

列表中任何长度超过 16384 字符的单个项目, 超出长度的那些字符将被视为一个新列表项. 因此, 通常最好避免包含这样的项目.

备注

比较总是按字母顺序进行, 而不是作为数字. 例如, 字符串 "11" 不会匹配列表项 "11.0".

除了支持搜索多个字符串(其中任何一个都将形成匹配) 外, "contains" 运算符的作用与 InStr()If[Not]InString 相同.

可以使用 StringCaseSense On 来设置在比较时区分大小写.

如果 MatchList 较长, 可以通过延续片段方法将其分解成较短的几行, 这样可以增加可读性和可维护性.

运算符 "in" 和 "contains" 不支持用于表达式中. 相反, 使用 If 语句, 如 if (Var ~= "i)\A(Value1|Value2)\z") 表示 "in", 或 if (Var ~= "i)Value1|Value2") 表示 "contains", 来模拟这些运算符的行为.

if var between, IfEqual/Greater/Less, IfInString, StringCaseSense, 区块, Else

示例

检查 var 是否为文件扩展名 exe, bat 或 com.

if var in exe,bat,com
    MsgBox The file extension is an executable type.

检查 var 是否为质数 1, 2, 3, 5, 7 or 11.

if var in 1,2,3,5,7,11 ; 避免在列表中添加空格.
    MsgBox %var% is a small prime number.

检查 var 是否包含数字 1 或 3.

if var contains 1,3  ; 注意, 比较的值是字符串, 而不是数字.
    MsgBox Var contains the digit 1 or 3 (Var could be 1, 3, 10, 21, 23, etc.)

检查 var 是否是 MyItemList 中的一个项目.

if var in %MyItemList%
    MsgBox %var% is in the list.

允许用户输入一个字符串, 并检查它是否是单词 yes 或 no.

InputBox, UserInput, Enter YES or NO
if UserInput not in yes,no
    MsgBox Your input is not valid.

检查 active_title 是否包含 "Address List.txt" 或 "Customer List.txt", 检查是否不包含 "metapad" 或 "Notepad".

WinGetTitle, active_title, A
if active_title contains Address List.txt,Customer List.txt
    MsgBox One of the desired windows is active.
if active_title not contains metapad,Notepad
    MsgBox But the file is not open in either Metapad or Notepad.
unixetc