0

我有一个格式为“123 - Test - English.pdf”的 pdf 文件列表。我希望能够在各自的变量中设置“111”、“Test”和“English.pdf”。我尝试运行下面的代码,但我认为它不会导致多个破折号“-”。我怎样才能做到这一点?请帮助提前谢谢。

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

3 回答 3

1

I would recommend using a parse loop to get your variables. The following loops through values between the dashes and removes the whitespace.

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

msgbox % Myvar1 "`n" Myvar2 "`n" MyVar3
于 2013-07-19T19:03:23.437 回答
1

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

其次,如果您只是使用,=那么您的代码将作为代码文本输出。你需要使用一个:=

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

somepdffile.pd 

如果它发现任何没有破折号的 pdf 文件。 Instr()将返回破折号的位置。如果没有破折号,它会返回0- 在这种情况下,您的substr()语句将添加0并且您的-1哪个加起来-1,如果您使用负数 with substr(),它将从字符串的末尾而不是开头搜索 - 这就是为什么您的字符串会被切断。

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

所以有一个解释为什么你的代码不起作用。为了让它做你想做的事,你能解释一下你想要NewVariable的样子吗?

于 2013-07-19T16:53:11.783 回答
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
于 2013-07-19T21:11:37.433 回答