Autohotkey 保存文件名的特定区域

Autohotkey 保存文件名的特定区域,autohotkey,Autohotkey,我有一个pdf文件列表,格式是“123-Test-English.pdf”。我希望能够在各自的变量中设置“111”、“Test”和“English.pdf”。我试着运行下面的代码,但我认为它不能解释多个破折号“-”。我该怎么做?请帮忙,谢谢 Loop,C:\My Documents\Notes\*.pdf, 0, 0 { NewVariable = Trim(Substr(A_LoopFileName,1, Instr(A_LoopFileName, "-")-1))

我有一个pdf文件列表,格式是“123-Test-English.pdf”。我希望能够在各自的变量中设置“111”、“Test”和“English.pdf”。我试着运行下面的代码,但我认为它不能解释多个破折号“-”。我该怎么做?请帮忙,谢谢

    Loop,C:\My Documents\Notes\*.pdf, 0, 0
    {
    NewVariable = Trim(Substr(A_LoopFileName,1, Instr(A_LoopFileName, "-")-1))

首先,我不知道这是否是一个输入错误,但如果在循环语句下使用
{
,则还需要关闭它。如果下一个语句只有一行,则根本不需要任何括号

第二,如果您只使用
=
,那么您的代码将作为代码文本输出。您需要使用
:=

第三,如果编码正确,您当前的代码将导致:

somepdffile.pd 
如果它发现任何没有破折号的pdf文件。
Instr()
将返回破折号的位置。如果没有破折号,它将返回
0
——在这种情况下,您的
substr()
语句将添加
0
和您的
-1
,这将相加为
-1
,如果您将负数与
substr()
,它将从字符串的末尾而不是开始搜索-这就是为什么您的字符串会被截断的原因

Loop, C:\My Documents\Notes\*.pdf, 0, 0
{
    ;look at the docs (http://www.autohotkey.com/docs/) for `substr`
}

因此,有一种解释解释说明了为什么您的代码不起作用。为了让它完成您想做的事情,您能否进一步解释一下您希望
NewVariable
的样子?

我建议使用解析循环来获取变量。以下循环通过虚线之间的值并删除空格

FileName = Test - file - name.pdf
Loop, parse, FileName, `-
    MyVar%A_Index% := RegExReplace(A_LoopField, A_Space, "")

msgbox % Myvar1 "`n" Myvar2 "`n" MyVar3
; here is another way (via RegExMatch)
src:="123 - Test - English.pdf", pat:="[^\s|-]+"
While, mPos:=RegExMatch(src, pat, match, mPos ? mPos+StrLen(match):1)
   match%A_Index%:=match
MsgBox, 262144, % "result", % match1 ", "match2 ", "match3