Autohotkey If 语句只产生一个结果

时间:2021-02-28 13:58:28

标签: if-statement autohotkey

我只想在工作日运行一个程序, 所以我写了一个 AutoHotKey 脚本来检查“今天是星期天还是假期”

但是我的脚本不起作用,我不明白问题出在哪里。 这是代码。

Result = "WorkingDay"

if(A_Wday = 1) {
Result = "Sunday"
}

HolidayList = 0101|0211|0212|0213|0301|0409|0501|0505|0519|0606|0815|0920|0921|0922|1003|1009|1225
StringSplit,HoliDay,HoliDayList,|
StringLeft,Today,A_Now,8
StringRight,Today,Today,4

Loop %Holiday0%
    {
    CheckDay := HoliDay%A_index%
    ; msgbox, %Today% = %CheckDay%
    if ( %Today% == %CheckDay% ) {
    Result = "Holiday"
    break
    }
}

msgbox, %Today% = %Result%

问题是“Result”变量只返回“Holiday”

请帮帮我......... 提前致谢。

1 个答案:

答案 0 :(得分:1)

基本上,您只是在使用一大堆遗留代码,并试图混合一些现代的非遗留代码,除非您非常了解如何去做,否则它们真的不能很好地混合。

最大的问题就在这里:
if ( %Today% == %CheckDay% )
通过尝试使用在非遗留 if ()(docs) 中引用变量的遗留方式,会发生不好的事情。您正在尝试使用动态变量,而您真的不想要那样,所以实际发生的是您检查是否 nothing == nothing,并且它总是会返回 true
您实际上应该如何在现代表达式语句中引用变量,只是
if (Today = CheckDay)
(比较时,=== 用于不区分大小写和区分大小写的比较,您可能打算执行 =

现在它应该可以工作了。
这是现代 AHK 的完整代码:

Result := "WorkingDay"

if (A_Wday = 1) 
    Result := "Sunday"

HolidayList := "0101|0211|0212|0213|0301|0409|0501|0505|0519|0606|0815|0920|0921|0922|1003|1009|1225"
Holidays := StrSplit(HolidayList, "|")
Today := SubStr(A_Now, 5, 4)

for each, Holiday in Holidays
{
    if (Today = Holiday)
    {
        Result := "Holiday"
        break
    }
}

MsgBox, % Today " = " Result

我现在没有时间对其进行更多解释,但要了解旧版与现代 AHK,我推荐此文档页面和我之前的回答:
https://www.autohotkey.com/docs/Language.htm

When to use % or %variable% in AutoHotKey?