废话不说, 翠花,上代码!
jscriptshell.js
/******************************************************************* * ******* ******* ******* ***** ******* * * JScript Shell ***** ******* ****** * ****** **** *** * Version 0.1 *** ******* ***** ** ******* * ***** * 2009-02-06 ** **** *** ******* ******* * * ******* *** ***** * ******* ** ******* ** ***** *** **** ****** * ******* * ****** * ******* ***** ******************************************************************** * Copyright 2009 HE Shi-Jun * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, * * software distributed under the License is distributed on an * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * * either express or implied. See the License for the specific * * language governing permissions and limitations. * *******************************************************************/ function help() { commands = [ 'help() Display usage and help messages', "load(['foo.js' ...]) Load files named by string arugments", 'print([exp ...]) Evaluate and print expressions', 'quit() Quit the shell', 'gc() Runs the garbage collector' ] return "\ Command Description\n\ ======= ===========\n\ " + commands.join('\n') } function load() { for (var i = 0, f; i < arguments.length; i++) { f = arguments[i] eval(readUrl(f)) } } function readUrl(url) { if (isRelative(url)) url = WScript.ScriptFullName + '/../' + url if (readUrl.req == null) readUrl.req = WScript.CreateObject('Msxml2.XMLHTTP.3.0') readUrl.req.open('GET', url, false) readUrl.req.send(null) return readUrl.req.responseText function isRelative(url) { return !/^[a-zA-Z]+:/.test(url) } } function print() { WScript.Echo(Array.prototype.join.call(arguments, ' ')) } function quit() { WScript.Quit() } function gc() { CollectGarbage() } new function () { var l = 0, newInput = true, input, output, lastLine while (true) { if (newInput) { WScript.StdOut.Write('js> ') input = WScript.StdIn.ReadLine() if (input == '?') input = 'help()' } else { WScript.StdOut.Write(' > ') input += '\n' + (lastLine = WScript.StdIn.ReadLine()) } l++ try { output = eval(input) } catch(e) { if (e instanceof SyntaxError && lastLine != ';;') { newInput = false continue } output = ' , line ' + l + ': ' + e.name + ': ' + e.message } WScript.Echo(output) newInput = true } }
执行:
C:\jscriptshell>cscript jscriptshell.js
如果你的script host默认使用cscript(可通过 cscript /H:CScript 来设置),则可以直接:
C:\jscriptshell>jscriptshell
TODO:
1. 加入类似于rhino的命令行参数
2. load脚本的错误处理