【问题标题】:Scala scripts in Windows batch filesWindows 批处理文件中的 Scala 脚本
【发布时间】:2011-10-04 01:19:24
【问题描述】:
在 Programming in Scala 中,它描述了如何从批处理文件 (link) 运行 Scala 脚本。
对于 Windows
::#!
@echo off
call scala %0 %*
goto :eof
::!#
我在搜索 ::#! 时遇到问题。这是什么意思?我知道:: 表示注释,在Unix 中#! 是要使用的shell 的方向,但这里到底是什么?还有::!#?
%0 %*到底是什么意思,有必要这样表达吗?
是否可以从同一个批处理文件中运行多个脚本?
【问题讨论】:
标签:
windows
scala
scripting
batch-file
【解决方案1】:
这是一个噱头,但它确实有效。它旨在复制 Unix shell 调用特定命令来处理 shell 文件的能力。所以,这里是解释:
::#!
以:: 开头的行是 Windows shell 中的 cmets,所以这只是一个注释。
@echo off
不要显示从这里开始执行的行。开头的@ 确保不会显示此行本身。
call scala %0 %*
将执行转移到scala 脚本。 %0 表示此文件本身的名称(以便 scala 可以找到它),%* 是在其执行过程中传递的参数。
例如,假设这些行位于名为 count.bat 的文件中,您通过键入 count 1 2 3 调用它。在这种情况下,该行将执行scala count 1 2 3——在这种情况下你会得到一个错误。您必须通过键入 count.bat 来调用它。
goto :eof
完成脚本的执行。
::!#
另一个注释行。
所以,这就是诀窍... Scala,一旦被调用,将找到作为第一个参数传递的文件,检查第一行是否为 ::#!,如果是,则忽略直到行 ::!# 的所有内容,然后将文件的其余部分(::!# 之后的行)作为 Scala 脚本执行。
换句话说,智能的不是 Windows shell,而是 Scala。 :-)
【解决方案2】:
%0 表示程序名(可能是脚本文件名),%* 表示命令行参数列表。 %1 表示第一个参数...