If var [not] in value1,value2,...
If var [not] 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, 那么它的部分或者全部就必须存储在一个变量里, 因为16383是任何一个脚本一行中所能存储的最大长度. 例如, MatchList 可以由 %List1%,%List2%,%List3% 组成 -- 其中每一个变量中保存了用来匹配字符串的词组的一个大的子列表.

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

备注

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

"contains" 操作符和使用 IfInString/IfNotInString 效果一样, 除了它还支持查找多个字符串 (其中任何一个都会形成匹配).

"StringCaseSense On" 可以被用来设置比较是否区分大小写.

如果 MatchList 较长, 可以使用 字串分段 的方法将它分成较短的几行, 这样可以增加可读性和可维护性.

如下操作符 "between", "is", "in", 和 "contains" 不能用于 表达式 中.

相关

if var between, IfEqual/Greater/Less, IfInString, StringCaseSense, Blocks, Else

示例

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

if var in 1,2,3,5,7,11 ; Avoid spaces in list.
    MsgBox %var% is a small prime number.

if var contains 1,3  ; Note that it compares the values as strings, not numbers.
    MsgBox Var contains the digit 1 or 3 (Var could be 1, 3, 10, 21, 23, etc.)

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

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

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.