Hur kör denna Windows batchfil inbäddad JavaScript?
Hur vet Windows att detta är 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(" ------ ")
Exempel på användning:
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
------
Svar #1
Det är faktiskt ganska enkelt. Den första raden är giltigt batchfil-språk för att sätta en shell-variabel och allt efter det sista blanksteget ignoreras. Det är också giltig JSCRIPT för att sätta kompileringstidsvariabler, och de sista två tecknen börjar en Javascript-kommentar som gör att resten av batchfil-språkraderna ignoreras.
Raden cscript orsakar att samma fil %0 körs av JSCRIPT med samma argument %*. Sedan använder batchens goto-sats :eof som är en inbyggd etikett som representerar slutet av filen.
Om du är nybörjare, och du tillbringar din tid med att lära dig hur man använder JSCRIPT för problemen med Windows shell-skriptning, kan du återanvända dina Javascript-kunskaper i webbläsaren med webbapplikationer, med Windows HTML-appar (.HTA), och till och med i shell-skriptning på Unix-plattformar som har Rhino eller node.js installerat.