注意:此技巧也适用于Lua以外的脚本语言,或者在某些上下文中可能被视为应用程序的任何其他文档类型以及其他文档中的文档。
如果解释器已经与Windows中的.lua
文件相关联(即如果双击.lua
文件在解释器中运行它),则很容易直接在命令行上执行它们
你需要:
PATH
环境变量; .lua
扩展名添加到PATHEXT
环境变量。通过这种方式,您可以通过在命令行中键入其名称来运行任何 Lua脚本。现在的问题是你不能在PATH的任何目录中放置另一个Lua脚本而不用冒着被执行的风险,即使你不希望它被执行。 (这种.lua文件的一个例子是你的程序私有的模块,它将由require
加载。模块按惯例也命名为.lua
,但很少支持作为独立程序执行。)
所以这是一种全有或全无的情况。您允许执行路径上的目录中的任何脚本或不执行任何脚本。
是否只允许在路径目录中某些脚本输入其名称?
答案 0 :(得分:2)
诀窍是控制台PATHEXT机制理解“双扩展”,即向.exe.lua
添加PATHEXT
“扩展名”将只执行那些其全名以{结尾}的Lua脚本{1}}(当然您可以选择其他扩展名,例如.exe.lua
)。注意:我使用引号来避免可能的混淆和缺乏更好的术语(请记住,传统上,文件扩展名是文件名在最后一个点之后)的一部分。
因此,通过将.run.lua
添加到.exe.lua
,只有PATHEXT
可执行,而任何其他Lua脚本都不会(只要它没有相同的“双扩展名”)。
这允许区分“普通”脚本和“可执行”脚本,而无需在不同目录中将它们分开或定义新的自定义文件扩展名,这涉及修改注册表。
此外,由于此行为由环境变量控制,因此它是按进程设置 - 您只能为特定控制台窗口启用它。例如,如果您使用以下内容创建批处理文件:
whatevername.exe.lua
并且您运行它,它将打开一个控制台,该控制台将能够执行路径上找到的所有@set PATHEXT=%PATHEXT%;.exe.lua &cmd /K
脚本,但不能执行任何其他.exe.lua
脚本。