我有一个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))
答案 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