在Lua中获取当前工作目录
有什么 Lua 代码可以在 Windows XP SP3 上获取当前工作目录(或获取当前正在运行的 Lua 文件的目录)吗?我更喜欢 不 使用 LuaFileSystem。
我不能使用 os.execute("cd")
,因为 os.execute
总是从我的主目录开始(因此总是会得到 C:\Documents and Settings\username
)。
原文链接 https://stackoverflow.com/questions/6032268
可能需要一些丑陋的 hack,例如
current_dir=io.popen"cd":read'*l'
将下面翻译成中文并且保留原本的 markdown 格式:
# Title
This is a paragraph that contains **bold text** and *italicized text*.
## Subtitle
Here is a list of items:
- Item 1
- Item 2
- Item 3
### Subsubtitle
Here is a code block:
print("Hello, world!")
And here is a link to [Google](https://www.google.com/).
标题
这是一个包含粗体文本和 斜体文本 的段落。
子标题
以下是一些条目:
- 条目1
- 条目2
- 条目3
子子标题
这里有一个代码块:
print("Hello, world!")
这是链接到谷歌的链接。
```
Lua 默认没有支持“当前目录”和“目录”这些概念的“本地”方式。
获取当前目录的正确方式是使用一个提供文件夹支持的库。有几个库 - 我建议使用luafilesystem。
一旦安装完成,您可以通过执行以下操作获取当前目录:
lfs.currentdir()
这适用于 windows、linux 和 mac。
但是请注意,这些外部库通常涉及一些二进制包。根据您的设置,您可能需要在使用之前进行编译。
编辑:
注意,当通过require
包含文件时,表达式{...}[1]
返回require
指令使用的路径。它不是确切的路径,因为:
- 它使用句点来分隔目录并去掉文件末尾的
.lua
。 - 它是相对于初始化 lua 进程的路径的。
- 它取决于
package.path
的配置。
但是,如果你只需要文件的“类似 require 的路径”(也许是为了要求它旁边的文件),那么你可以在文件的开头这样做:
local PATH = (...):match("(.+)%.[^%.]+$") or (...)
如果使用require 'foo.bar.baz'
来要求一个名为baz.lua
的文件,那么PATH
将是foo.bar
。
你可以使用 alien 调用 kernel32.dll 中的 GetCurrentDirectory 函数,但这可能不是你想要的。
你应该能够使用以下代码获取当前正在运行的 Lua 文件路径:
debug.getinfo(1).short_src;
或者
debug.getinfo(1).source;
然后可以使用正则表达式获取当前目录:
string.gsub(debug.getinfo(1).short_src, "^(.+\\)[^\\]+$", "%1");
注:仅在使用完整路径运行 Lua 时才能使用上述代码,例如:"lua.exe C:\test\test.lua",而非"lua.exe test.lua"。
我尝试了所有这些答案,但没有任何效果。我测试了以下脚本,它能按预期工作。
io.popen("cd"):read()
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我还没有时间测试这个功能,但你尝试过使用 os.getenv 读取 Windows 环境变量吗?
Windows 有一个当前目录的环境变量:**%CD%**
os.getenv("CD")
编辑: 在 Windows 7 上测试过,其他环境变量能够正常工作(例如 %USERNAME% 或 %PROGRAMFILES%),但 CD 变量返回 nil。