Windowsで現在の作業ディレクトリを取得するためのLuaは何ですかXP SP3(または現在実行中のLuaファイルのディレクトリを取得するため))?私はnot使用する LuaFileSystem 。
_os.execute
_は常にホームディレクトリから開始するため、os.execute("cd")
を使用できません(したがって、常に_C:\Documents and Settings\username
_が生成されます)。
Luaには、デフォルトでは、「現在のディレクトリ」の概念、または実際には「ディレクトリ」の概念をサポートする「ネイティブ」な方法がありません。
現在のディレクトリを取得する適切な方法は、フォルダサポートを提供するライブラリを使用することです。いくつかあります-私はお勧めします luafilesystem 。
インストールしたら、次のコマンドを実行して現在のディレクトリを取得できます。
lfs.currentdir()
これは、Windows、Linux、Macで機能します。
ただし、これらの外部ライブラリには通常、いくつかのバイナリパッケージが含まれていることに注意してください。設定によっては、使用する前にコンパイルする必要がある場合があります。
編集:
ファイルがrequire
を介して含まれている場合、式{...}[1]
はrequire
ディレクティブで使用されるパスを返すことに注意してください。次の理由により、正確にパスではありません。
.lua
を抑制します。package.path
の構成によって異なりますしかし、必要なのがファイルの「require-like path」だけである場合(おそらくその隣にファイルを要求するため)、ファイルの最初でこれを行うことでそれを取得できます。
local PATH = (...):match("(.+)%.[^%.]+$") or (...)
baz.lua
というファイルがrequire 'foo.bar.baz'
とともに必要な場合、PATH
はfoo.bar
になります。
多分いくつかの醜いハックのような
current_dir=io.popen"cd":read'*l'
次の方法で、現在実行中のluaファイルパスを取得できるはずです。
debug.getinfo(1).short_src;
または
debug.getinfo(1).source;
次に、正規表現を含む現在のディレクトリ:
string.gsub(debug.getinfo(1).short_src, "^(.+\\)[^\\]+$", "%1");
編集:実際には、フルパスでluaを実行している場合にのみ機能します。例:「lua.exeC:\ test\test.lua」であり、「lua.exetest.lua」ではありません
これをテストする時間がありませんでしたが、Windows環境変数を読み取るために os.getenv を試しましたか?
Windowsには、現在のディレクトリの環境変数があります:%CD%
os.getenv("CD")
編集:Windows 7でテストされ、他の環境変数(つまり、%USERNAME%または%PROGRAMFILES%)が機能している間、CD変数はnilを返します
alien を使用して kernel32.dllのGetCurrentDirectory を呼び出すこともできますが、それはおそらくあなたが探しているものではありません。