AutoHotkey中A_Args[1]传入字符串时StrReplace为何失效?
问题原因与修正方案
1. 命令行参数传递错误
Windows CMD不支持用单引号包裹命令行参数,你执行的命令会把带单引号的'$In-5,$Out-50'完整传给脚本,导致替换逻辑无法匹配$In、$Out(实际参数里是'$In、'$Out)。
修正命令行:改用双引号包裹参数:
.\somepath\AHKScript.ahk "$In-5,$Out-50"
2. 循环替换逻辑错误
第一段代码的循环每次都从原始的A_Args[1]重新生成RawArgs,而非基于上一次替换后的结果迭代处理。比如第一次替换$In后,第二次循环又用未修改的原始参数去替换$Out,直接覆盖了之前的结果,最终只有最后一次替换(此处Dogs无匹配项)生效,导致输出仍为原始字符串。
修正第一段代码:先将原始参数赋值给RawArgs,再在循环中迭代更新:
ObjectsList := ["In","Out", "Dogs"] In := 50 Out := 100 Dogs := 5 RawArgs := A_Args[1] ; 先保存原始参数 For each, Obj in ObjectsList RawArgs := StrReplace(RawArgs, "$" Obj, %Obj%) msgbox, % RawArgs
同时修正命令行后,即可得到预期的50-5,100-50输出。
内容的提问来源于stack exchange,提问作者gaberiel__
相关产品推荐
相关产品推荐

