如何让F#脚本文件和其他脚本语言像Windows中的.exe,.cmd和.bat文件一样工作

可以configurationF#脚本文件,以便可以直接调用它们,而无需直接指定脚本运行器应用程序及其文件扩展名,并可通过命令PATH环境variables进行访问。

这样做的步骤如下:

  1. 使用Windows资源pipe理器将特定脚本引擎设置为脚本文件types扩展的默认“打开方式”程序
  2. 将脚本扩展附加到PathExt环境variables,将其分类为可执行文件
  3. 或者,将包含脚本的目录path包含到Windows Path环境variables中

我的问题是:如果不直接调用它的runner应用程序,如何通过脚本获取参数。

Solutions Collecting From Web of "如何让F#脚本文件和其他脚本语言像Windows中的.exe,.cmd和.bat文件一样工作"

以下提供了一个简单的技术来配置您的Windows系统,以包含F#作为与cmd和批处理文件相同的脚本语言。 因此,脚本可以从环境路径访问,不需要文件类型扩展就可以调用,并且可以传递任意数量的参数。 这种技术应该适用于其他脚本语言,如PowerShell,Python等。

以下是用于在.Net 4.0中为F#3.1建立此配置的批处理文件:

 configure.bat rem absolute filename of the F# script runner, Fsi.exe set fsharpScriptRunner="C:\Program Files (x86)\Microsoft SDKs\F#\3.1\Framework\v4.0\Fsi.exe" rem script runner command for fsi.exe to execute script and exit without advertising itself set fsharpScriptRunnerCmd=%fsharpScriptRunner% --nologo --exec rem associate "FSharpScript" files with fsharpScriptRunnerCmd, appending rem the file name and remaining line arguments into the commandline rem after the delimiter "--" ftype FSharpScript=%fsharpScriptRunnerCmd% %%1 "--" %%* rem associate file extension ".fsx" with the file type "FSharpScript" assoc .fsx=FSharpScript rem add ".fsx" to the list of file types treated as executable set pathext=%pathext%;.fsx 

请注意,“ftype”命令行中“ – ”的存在作为分隔符,以帮助脚本区分命令行参数与脚本运行器的参数; 一个F#脚本接收所有的参数,并且必须解析出它的参数。 我使用提供的分隔符来解析这个笨拙的F#版本如下:

 open System let args = Environment.GetCommandLineArgs() |> Seq.skipWhile (fun p -> p <> "--") |> Seq.skip 1 |> List.ofSeq 

请享用。