If statement 如何使用;及;及;或;同一个关键字中的同一个关键字;如果;陈述

If statement 如何使用;及;及;或;同一个关键字中的同一个关键字;如果;陈述,if-statement,vbscript,If Statement,Vbscript,我试图在VB脚本中的单个If语句中使用和和或关键字,我使用VLC Media Player使用命令行进行流式处理。 我试着这样做: If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5)) Then 当我执行脚本时,似乎只有以下两个条件有效

我试图在VB脚本中的单个If语句中使用
关键字,我使用VLC Media Player使用命令行进行流式处理。 我试着这样做:

If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5)) Then
当我执行脚本时,似乎只有以下两个条件有效

1.If ((CurrentEP >= 2) Then '<< FIRST CONDITION

2.If (CStr(TSNStr) = CStr(PTSNStr)) Then '<< SECOND CONDITION

1.如果((CurrentEP>=2)那么“有许多条件,由于求值的优先级和顺序,总是会使求值变得棘手。您可能希望查看那些与vb脚本相关的规则。解决方案通常像您尝试的那样是圆括号,但我怀疑您需要在前两个条件周围再添加一对,如:

If (((CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr))) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5))) Then
如果((CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr)))和((CInt(TSSEPStr)-CInt(PTSSEPStr))=5)),则

是的,这是可能的,魔鬼在于细节,这是关于思考所有可能的路径,并密切注意决定求值顺序的括号(通过查看代码,您很清楚)

首先执行括号最深的评估,然后执行下一级评估,直到到达顶部。例如(您可以在Excel中尝试此操作):-

这些评价是:-

1.25 * 3 / 2
3.75 / 2
1.875

这里有一个算法也起作用,你可能想仔细阅读

另外,(您可能也知道这一点)
求值中的所有元素都必须是
True
,才能使结果是
True
。在
求值中,任何
为True
的元素都将导致
为True

True
True
True
=
True

=

True
True
True
=
True

True
=

然后还可以添加括号以调整顺序计算:-

True
True
True
)=
True

True
True
False
)=
True

)=

关于你的问题,我认为你把你的大于和小于混淆在一起了,也有一些小到多的括号,但它仍然应该被评估

1>2=
False

2>1=
True

2>2=
False

1<2=
True

2<1=
False

2<2=
False

让我们调用
CInt(TSSEPStr)-CInt(PTSSEPStr)
i
:-

i = 0
(i >= 5) Or (i <= -5) = (False) Or (False) = False
0小于或等于5,0大于或等于-5

i = 10
(i >= 5) Or (i <= -5) = (True) Or (False) = True
i = 10
(i <= 5) And (i >= -5) = (False) And (True) = False
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= -5) Then
i=10
(i=-5)=(假)和(真)=假
10不小于或等于5,10大于或等于-5

i = 10
(i >= 5) Or (i <= -5) = (True) Or (False) = True
i = 10
(i <= 5) And (i >= -5) = (False) And (True) = False
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= -5) Then
如果(CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr))和(CInt(TSSEPStr)-CInt(PTSSEPStr)>=5)和(CInt(TSSEPStr)-CInt(PTSSEPStr)在@GaryEvans的答案的帮助下,我发现由于使用了太多的括号,这一行的计算结果总是为false

我只是做了一个小小的改变,下面这句话果然如我所料:

If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= -5) Then
如果(CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr))和(CInt(TSSEPStr)-CInt(PTSSEPStr)=-5),则
使它更简短、更清晰:

If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr - PTSSEPStr) <= 5) And (CInt(TSSEPStr - PTSSEPStr) >= -5) Then
如果(CurrentEP>=2)和(CStr(TSNStr)=CStr(PTSNStr))和(CInt(TSSEPStr-PTSSEPStr)=-5),则

对于变量中的有效值,我看不出你的第三个条件是什么,但总是真的。这对我帮助很大,谢谢:-)
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr - PTSSEPStr) <= 5) And (CInt(TSSEPStr - PTSSEPStr) >= -5) Then