Lua 中获取当前文件名

如何在 Lua 中获取当前文件名(不带路径和 .lua 后缀)?

我试过:

local info = debug.getinfo(1,'S');
print(info.source);

然后我得到了这个:

@data/spells/scripts/10lvl/bakurichimacha.lua
@data/spells/scripts/1000lvl/brave sword attack.lua

如何删除这些部分:

@data/spells/scripts/10lvl/ 和 .lua
@data/spells/scripts/1000lvl/ 和 .lua

只想打印出 bakurichimacha 和 brave sword attack?

点赞
用户7253993
用户7253993

尝试这个:

function get_file_name(file)
      return file:match("^.+/(.+)$")
end
2018-01-23 13:40:10
用户1102416
用户1102416

你可以使用 string.match 函数

local filename = function()
  local str = debug.getinfo(2, "S").source:sub(2)
  return str:match("^.*/(.*).lua$") or str
end
print(filename());
2018-01-26 21:41:01
用户8584835
用户8584835

虽然 @kingjulian 的回答在大多数情况下似乎有效,但对于无路径的文件名参数则失败。例如 aTestFile.lua 等。

我稍微修改了正则表达式,以包括这些缺失的场景

function get_file_name(file)
      return file:match("[^/]*.lua$")
end

在这里 测试了

获取不带扩展名 .lua 的文件名

function get_file_name(file)
      local file_name = file:match("[^/]*.lua$")
      return file_name:sub(0, #file_name - 4)
end
2019-06-09 09:56:20