Это трюк, но он работает. Он намеревается повторить способность оболочки Unix вызывать определенную команду для обработки файла оболочки. Итак, вот объяснение:
::#!
Строки, начинающиеся с ::
, являются комментариями в оболочке Windows, поэтому это просто комментарий.
@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, а Scala. : -)