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

我正在用纯 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。

有人见过这样的问题吗?

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

点赞
stackoverflow用户394012
stackoverflow用户394012

请使用以下语法尝试:

os.execute [["dir /B C:\Users\Fernando\workspace\Organizator2\s1 > C:\Users\Fernando\workspace\Organizator2\temp.txt"]]

请注意,反斜杠(\)在此情况下不是特殊字符。 (Lua 在内部使用 cstrings,有时会导致一些奇怪而惊人的结果:P)

2011-02-15 17:55:39
stackoverflow用户596285
stackoverflow用户596285

大部分你列出的命令似乎都是仅适用于命令提示符中的 shell 命令。尝试直接运行 cmd.exe,看看是否会出现提示符,如果有,则可以尝试通过 /c 选项将命令传递给 cmd.exe。你也可以尝试不使用 start 来运行记事本(notepad),看看是否可以运行。

2011-02-15 19:56:47
stackoverflow用户483603
stackoverflow用户483603
使用以下命令可以实现该功能: 

os.execute('cmd.exe /c dir /B C:\> C:\test.txt')

```

这样可以正常运行。但在 Windows 中使用类 Linux 的命令并不是一个好主意 =)

2011-02-16 09:56:01
stackoverflow用户604734
stackoverflow用户604734

我刚在我的电脑上测试了您的代码,它可以正常工作(当然是根据我的目录)。也许您没有得到预期的结果是因为您的 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")
2011-02-19 19:30:05