【问题标题】:Autohotkey If Statement makes only one resultAutohotkey If 语句只产生一个结果
【发布时间】:2021-02-28 22:52:28
【问题描述】:

我只想在工作日运行一个程序, 所以我写了一个 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”

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

【问题讨论】:

    标签: if-statement autohotkey


    【解决方案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?

    【讨论】:

    • 我必须感谢你。它工作得很好,现在我知道我的脚本的问题了。你真是个善良的人。谢谢。
    猜你喜欢
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    相关资源
    最近更新 更多