【问题标题】:How does this Windows batch file run embedded javascript?这个 Windows 批处理文件如何运行嵌入式 javascript?
【发布时间】:2014-07-09 06:51:48
【问题描述】:

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
        ------

【问题讨论】:

  • 我发布了这个 a) 因为它在 Windows 程序员中并不为人所知,b) 对于初学者来说,学习 Javascript 比与晦涩的批处理脚本或语法上残暴的 Powershell 搏斗要好。
  • 我通常对这样的事情不感兴趣,但我认为这对于 StackOverflow 来说不是一个合适的“问题”(至少根据我对基本规则的解释)。
  • 这个问题是关于编写代码来完成特定的事情,这就是编程的全部内容。并非每个问题都会为每个读者提供有用的信息,这就是我们有标签的原因。
  • 我的意思是这不合适,因为这不是一个真正的问题。 Stack Overflow 是关于寻求和接受帮助,而不是发布提示和技巧(除非问题要求这样做)。虽然信息可能有用,但我认为它更适合不同的论坛。
  • 感谢发帖!正是我的项目所需要的。令人惊讶的是,某些 bat 文件命令是多么晦涩难懂。这已经暴露了 :) JS 是给我的!

标签: javascript windows batch-file


【解决方案1】:

其实很简单。第一行是用于设置 shell 变量的有效批处理文件语言,最后一个空格之后的所有内容都将被忽略。它也是设置编译时变量的有效 JSCRIPT,最后两个字符开始一个 Javascript 注释,这会导致批处理文件的其余语言行被忽略。

cscript 行导致 JSCRIPT 使用相同的参数 %* 执行相同的文件 %0。然后批处理 goto 语句使用:eof,这是一个表示文件结尾的内置标签。

如果您是初学者,并且您花时间学习如何将 JSCRIPT 应用于 Windows shell 脚本问题,您可以在浏览器中通过 Web 应用程序、Windows HTML 应用程序 (.HTA) 重新应用您的 Javascript 知识,以及即使在安装了 Rhino 或 node.js 的 Unix 平台上的 shell 脚本中也是如此。

【讨论】:

  • 明确一点:@set @junk=1 /* 在批处理脚本中,这会将所有四个字符分配给变量 @junk [一、空格、正斜杠、星号]。 (这对这个问题并不重要。)此外,这解释了如何从 JScript 的角度处理该行:msdn.microsoft.com/en-us/library/thak6fez(v=vs.84).aspx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2012-12-10
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多