Lua编程 - os.execute()在Windows中不起作用

时间:2011-02-15 17:39:58

标签: windows eclipse lua command-prompt

我正在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

有人见过这样的问题吗?

4 个答案:

答案 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")