Как этот пакетный файл Windows запускает встроенный JavaScript? - PullRequest
4 голосов
/ 15 февраля 2011

Как Windows узнает, что это JSCRIPT?

@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/
x = WScript.Arguments
Yr = x(0) ; Mo = x(1)

YS = "JanFebMarAprMayJunJulAugSepOctNovDec"
MN = Mo<1 || Mo>12 ? Mo : YS.substr(3*Mo-3, 3) // Month Name
WScript.echo(" ", Yr, "         ", MN)
WScript.echo(" Mo Tu We Th Fr Sa Su")
WD = new Date(Yr, Mo-1, 1).getDay() ;
if (WD==0) WD = 7 // Week Day Number of 1st
LD = new Date(Yr, Mo, 0).getDate() // Last Day of month
Wk = "" ; for (D=1 ; D < WD ; D++) Wk += "   "

for (D=1 ; D<=LD ; D++) {
  Wk = Wk + " " + (D<10 ? "0"+D : D) ; WD++
  if ((WD==8) || (D==LD)) { WScript.echo(Wk) ; WD = WD-7 ; Wk = "" }
  }

WScript.echo("        ------       ")

Пример использования:

C:\batch>calendar.cmd 2014 7
  2014           Jul
 Mo Tu We Th Fr Sa Su
    01 02 03 04 05 06
 07 08 09 10 11 12 13
 14 15 16 17 18 19 20
 21 22 23 24 25 26 27
 28 29 30 31
        ------

1 Ответ

6 голосов
/ 15 февраля 2011

Это действительно очень просто.Первая строка является допустимым языком командного файла для установки переменной оболочки, и все, что находится после последнего пробела, игнорируется.Это также допустимый JSCRIPT для установки переменных времени компиляции, и последние два символа начинают комментарий Javascript, который приводит к игнорированию остальных строк языка пакетного файла.

Строка cscript вызывает тот же файл %0 подлежит исполнению АКРИПТ с теми же аргументами %*.Затем в пакетном операторе goto используется :eof, который представляет собой встроенную метку, обозначающую конец файла.

Если вы новичок и потратили время на изучение того, как применять JSCRIPT для решения проблем сценариев оболочки Windowsвы можете повторно применить свои знания Javascript в браузере с помощью веб-приложений, приложений Windows HTML (.HTA) и даже в сценариях оболочки на платформах Unix, на которых установлен Rhino или node.js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...