为什么赢了';程序文件中的t应用程序在lua中使用os.execute运行?
我正在尝试使用Lua的为什么赢了';程序文件中的t应用程序在lua中使用os.execute运行?,lua,Lua,我正在尝试使用Lua的os.execute()函数运行一个可执行文件。如果我做了以下类似的事情,它将不起作用: os.execute("C:\\\Program Files\\\Movie Maker\\\moviemk.exe") 但是,如果我将lua文件放在moviemk.exe所在的路径中,它就可以调用它 你知道为什么会这样吗 另外,我正在使用Windows XP SP3,请尝试: os.execute("C:\\Program Files\\Movie Maker\\moviemk.
os.execute()
函数运行一个可执行文件。如果我做了以下类似的事情,它将不起作用:
os.execute("C:\\\Program Files\\\Movie Maker\\\moviemk.exe")
但是,如果我将lua文件放在moviemk.exe
所在的路径中,它就可以调用它
你知道为什么会这样吗
另外,我正在使用Windows XP SP3,请尝试:
os.execute("C:\\Program Files\\Movie Maker\\moviemk.exe")
或:
“\”字符用于Lua中的转义字符。这是命令shell的典型问题。这实际上不是Windows特有的问题,只是在*nix上,人们从来没有真正养成在文件名中放入空格的习惯,Windows在一些默认系统位置(如
C:\Program Files
)中放入空格
发生的情况是,os.execute(str)
是根据ANSI C函数system(str)
实现的,该函数在Windows上尝试将键入“cmd/C.”.str
的效果复制到命令提示符。(在*nix上,它使用/bin/sh-c而不是cmd/c。)
经典的问题是,这必须在空白处分割完整的命令字符串,以决定运行哪个程序及其参数
您最初的示例:os.execute(“C:\\Program Files\\Movie Maker\\moviemk.exe”)
实际上变成了cmd/C:\Program Files\Movie Maker\moviemk.exe
,在空白处拆分后,CMD试图找到名为c:\program
的程序,以使用名为files\movie
和maker\moviemk.exe
的参数执行。这不是你想要的
解决办法是对报价采取更具防御性的态度
我将这样写:
os.execute [["C:\Program Files\Movie Maker\Moviemk.exe"]]
os.execute[[“C:\Program Files\Movie Maker\Moviemk.exe”]]
如果要提供额外的命令行参数,我会在每个参数周围使用双引号,并且在参数之间使用一个空格。使用长字符串语法有一个优点,即反斜杠不是一个特殊字符,因此您不需要额外的倾斜牙签,从而更难读取字符串文字
在每个参数周围使用双引号应该可以在Windows和*nix上使用,当然,在这两种平台上很难找到相同的命令
另一个需要注意的细节是
\Programs Files
可能不在C:
上。甚至可能没有名为C:
的磁盘。(我的工作电脑从E:
启动,我发现更多有缺陷的程序就是这样。)学习正确路径名的最简单方法是只使用环境变量ProgramFiles
。还有很多其他的方法。事实上,我想我已经找到了。我做了os.execute('C:\\\Program Files\\\Movie Maker\\\moviemk.exe“)…在“”周围的额外的“”似乎起到了作用。但对我来说似乎很奇怪。可能是某些文件名中的空格。Windows有时会与这些表单发生冲突。三个反斜杠太多了。如果将它们减少为两个,你可能会更幸运。
os.execute [["C:\Program Files\Movie Maker\Moviemk.exe"]]