NScripter(に限らない)で今現在のディレクトリのリストを取得する。
こういうのを聞いて、もうなりふり構ってらんねえな、と思いつつ作ってみた。
Luaパート
-- system.lua do local dir = {} -- 取得したディレクトリの中身を入れておくテーブル function dir_list() dir = {} -- 初期化 os.remove("dir.txt") -- 結果ファイルを初期化。 NSExec("shell \"dir.vbs\"") -- dir.txtに書きこませる。 local fh = nil -- ファイルハンドル while true do NSSleep(10) -- 念のため、10ミリ秒待ってみる。 fh = io.open("dir.txt", "r") -- ファイルを開いてみる。 if io.type(fh)=="file" then break end -- 開くのに成功すればループから抜ける。 end for line in fh:lines() do -- 一行ずつ読み込んで登録していく。 dir[1+#dir] = line -- chompされてるから安心だ。 end fh:close() -- ファイルハンドルを閉じる。 end function dir_list_verify() -- 読み込んでなければ読み込む。 if #dir == 0 then dir_list() end end NSExec("luasub read_dir") function NSCOM_read_dir() -- 強制更新用命令 dir_list() end -- いくつファイルがあるかを返す。 function filenum_in_dir() dir_list_verify() -- 確認。 return #dir -- 数を返す。 end NSExec("luasub filenum_in_dir") function NSCOM_filenum_in_dir() -- このディレクトリに今いくつのファイルがあるかを返す。 NSSetIntValue(NSPopIntRef(), filenum_in_dir()) end -- ファイル名を番号を指定して返す。 function read_file_name(num) dir_list_verify() -- 確認。 if type(num)~="number" then return nil end -- 数値以外は受け付けない。 if num<1 then return nil end -- 数値が0なら if num>#dir then return nil end return dir[num] end NSExec("luasub read_file_name") function NSCOM_read_file_name() local ref = NSPopStrRef() NSSetStrValue(ref, "") NSPopComma() local res = read_file_name(NSPopInt()+1) if res then NSSetStrValue(ref, res) end end end
system.lua内か、そこから呼び出すファイルに記述する。
dir.vbs
この名前でファイルを作り、その中に以下を記述する。
Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c dir.bat",vbhide
dir.bat
この名前でファイルを作り、その中に以下を記述する。
dir /B > dir.txt
解説
3つの命令を追加する。