我正在pure-Lua中创建一个函数来扫描目录中的文件并将它们放在另一个文件中。
我尝试的命令是:
os.execute( "dir /B C:\\Users\\Fernando\\workspace\\Organizator2\\s1 >
C:\\Users\\Fernando\\workspace\\Organizator2\\temp.txt" )
但......不行!我用其他更简单的命令做了很多测试,比如“start notepad”或“mkdir C:\ test”,他们也没用过!更糟糕的是我直接在提示中尝试了相同的命令,并且都是正确的。
我尝试使用io.popen(),但是系统为我传递的任何命令返回了“非法操作”(即使是一个空字符串!)。
这是所有代码:
function ScanDirectory(source, str)
local str = str or "temp.txt"
os.execute("dir /B "..source.." > "..str)
directory = io.open(str,"r")
return directory
end
-- main script
do
local source = "C:\\Users\\Fernando\\workspace\\Organizator2\\s1"
local directory = ScanDirectory(source, "C:\\Users\\Fernando\
\workspace\\Organizator2\\temp.txt")
end
我正在使用Windows 7和Luaforwindows,5.1以及LuaEclipse
有人见过这样的问题吗?
答案 0 :(得分:1)
请尝试使用以下语法:
os.execute [["dir /B C:\Users\Fernando\workspace\Organizator2\s1 >
C:\Users\Fernando\workspace\Organizator2\temp.txt"]]
请注意,在这种情况下,反斜杠(\
)不是特殊字符。
(Lua在内部使用cstrings,有时会导致一些奇怪而惊人的结果:P)
答案 1 :(得分:1)
您列出的大多数命令似乎都是仅在命令提示符下工作的shell命令。尝试直接运行cmd.exe以查看是否收到提示,如果是,则可以尝试通过/ c选项将命令传递给cmd.exe。您也可以在没有开始的情况下尝试记事本,看看是否会运行。
答案 2 :(得分:1)
os.execute('cmd.exe /c dir /B C:\\> C:\\test.txt')
有效。在win中使用Linux风格的命令是一个坏主意=)
答案 3 :(得分:0)
我刚刚在我的计算机上测试了你的代码,它的工作正常(当然是我的目录)。也许你没有得到预期的结果,因为你的directory
字符串被新行字符分解,导致:
dir /B C:\Users\Fernando\workspace\Organizator2\s1 > C:\Users\Fernando\
workspace\Organizator2\temp.txt
正确应该是:
dir /B C:\Users\Fernando\workspace\Organizator2\s1 > C:\Users\Fernando\workspace\Organizator2\temp.txt
请尝试将do end更改为:
local source = "C:\\Users\\Fernando\\workspace\\Organizator2\\s1"
local directory = ScanDirectory(source, "C:\\Users\\Fernando\\workspace\\Organizator2\\temp.txt")