保存文件名的特定区域

时间:2013-07-19 14:55:20

标签: 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))

3 个答案:

答案 0 :(得分: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看起来如何吗?

答案 1 :(得分:1)

我建议使用解析循环来获取变量。以下循环遍历破折号之间的值并删除空格。

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

msgbox % Myvar1 "`n" Myvar2 "`n" MyVar3

答案 2 :(得分:0)

; 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