Во-первых, у AHK действительно нет типов. По крайней мере, не так, как вы сталкивались с типами в других языках.
Так что ваше предположение о «неправильном типе» почти всегда будет неверным.
Так что настоящая причина в том, что в устаревшем Если оператор, синтаксис
if <name of variable> <operator> <legacy way of representing a value>
Таким образом, вы бы сделали это так:
if files_first_letter != %inputted_letter%
Вы сравниваем, если переменная files_first_letter
равна литералу text inputted_letter
.
Однако я настоятельно рекомендую вам прекратить использовать устаревший синтаксис. Это действительно так просто. Он будет сильно отличаться от любого другого языка программирования, и вы столкнетесь с таким странным поведением. Синтаксис выражения - это то, что вы хотите использовать в AHK в наши дни.
Вот ваш фрагмент кода, преобразованный в синтаксис выражения на случай, если вам интересно:
FileSelectFolder, WhichFolder
;Forcing an expression like this with % in every parameter
;is really not needed of course, and could be considered
;excessive, but I'm doing it for demonstrational
;purposes here. Putting everything in expression syntax.
;also, not gonna lie, I always do it myself haha
InputBox, UserInput, % "Start At What Letter?", % "Please enter a letter to start at within the folder (CAPITALIZE IT!).", , 450, 150
if (ErrorLevel)
;braces indicate an expression and the non-legacy if statement
;more about this, as an expression, ErrorLevel here holds the value
;1, which gets evaluated to true, so we're doing
;if (true), which is true
{
MsgBox, % "CANCEL was pressed."
ExitApp
}
else
inputted_letter := UserInput ; = is never used, always :=
Loop, Files, % WhichFolder "\*.*"
;non-legacy file loop
;note that here forcing the expression statement
;with % is actually very much needed
{
current_filename_full := A_LoopFileName
files_first_letter := SubStr(current_filename_full, 1, 1)
if (files_first_letter != inputted_letter)
continue
}
Также вам не нужно будьте обеспокоены регистром с !=
, он всегда будет сравнивать регистр без учета.