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

优质
小牛编辑
132浏览
2023-12-01

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

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" 运算符的作用与 IfInString/IfNotInString 相同.

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

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

运算符 "between", "is", "in" 和 "contains" 不支持用于 表达式 中.

相关

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

示例

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

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

if var contains 1,3  ; 注意这里把值作为字符串而不是数字进行比较.
    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.