Scala скрипты в командных файлах Windows

В программировании в Scala приводится описание того, как запускать скрипты Scala из пакетных файлов (ссылка).

Для Windows

  ::#!
  @echo off
  call scala %0 %*
  goto :eof
  ::!#

У меня проблема с поиском googling ::#!. Что это значит? Я знаю, что :: обозначает комментарий, а в Unix #! - это направление к используемой оболочке, но что это именно здесь? И ::!#?

Что именно означает %0 %*, и нужно ли это выражать это так?

Можно ли запускать несколько сценариев из одного и того же командного файла?

Ответ 1

Это трюк, но он работает. Он намеревается реплицировать способность оболочки Unix вызывать определенную команду для обработки файла оболочки. Итак, здесь объяснение:

::#!

Строки, начинающиеся с ::, являются комментариями в оболочке Windows, поэтому это всего лишь комментарий.

@echo off

Не показывать строки, выполненные здесь. @ в начале убедитесь, что эта строка не будет показана.

call scala %0 %*

Перенести выполнение на scala script. %0 означает имя этого файла (так что scala может его найти), а %* - это параметры, которые были переданы при его выполнении.

Например, скажем, что эти строки находятся в файле с именем count.bat, и вы вызывали его, набрав count 1 2 3. В этом случае эта строка выполнит scala count 1 2 3 - в этом случае вы получите сообщение об ошибке. Вы должны вызвать его, набрав count.bat.

goto :eof

Завершите выполнение script.

::!#

Другая строка комментария.

Итак, вот трюк... Scala, после вызова, найдет файл, переданный как первый аргумент, проверьте, что первая строка ::#!, игнорирует все до строки ::!#, если это так, а затем выполнить оставшуюся часть файла (строки после ::!#) как scala script.

Другими словами, это не оболочка Windows, а умная, она Scala.: -)

Ответ 2

% 0 указывает для имени программы (возможно, имя файла script),% * указывает для списка параметров командной строки. % 1 означает первый параметр...