在Lua中获取当前工作目录

有什么 Lua 代码可以在 Windows XP SP3 上获取当前工作目录(或获取当前正在运行的 Lua 文件的目录)吗?我更喜欢 使用 LuaFileSystem

我不能使用 os.execute("cd"),因为 os.execute 总是从我的主目录开始(因此总是会得到 C:\Documents and Settings\username)。

原文链接 https://stackoverflow.com/questions/6032268

点赞
stackoverflow用户415823
stackoverflow用户415823

我还没有时间测试这个功能,但你尝试过使用 os.getenv 读取 Windows 环境变量吗?

Windows 有一个当前目录的环境变量:**%CD%**

os.getenv("CD")

编辑: 在 Windows 7 上测试过,其他环境变量能够正常工作(例如 %USERNAME% 或 %PROGRAMFILES%),但 CD 变量返回 nil。

2011-05-17 16:50:51
stackoverflow用户513763
stackoverflow用户513763

可能需要一些丑陋的 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!")

这是链接到谷歌的链接。

```

2011-05-17 20:43:25
stackoverflow用户312586
stackoverflow用户312586

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

2011-05-18 14:28:19
stackoverflow用户34799
stackoverflow用户34799

你可以使用 alien 调用 kernel32.dll 中的 GetCurrentDirectory 函数,但这可能不是你想要的。

2011-05-19 15:32:31
stackoverflow用户979227
stackoverflow用户979227

你应该能够使用以下代码获取当前正在运行的 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"。

2011-10-04 20:28:16
stackoverflow用户11518056
stackoverflow用户11518056

我尝试了所有这些答案,但没有任何效果。我测试了以下脚本,它能按预期工作。

io.popen("cd"):read()
2022-07-27 14:01:35