6

我需要为 WinXP 编写一些脚本来支持 Big Financial Corp 的一些分析师。请帮助我确定哪种类型的 Windows 脚本最适合我的需要。

我的需求似乎很简单(无论如何对我来说)

  1. 在 WinXP Pro SP2(2002 版)上运行
  2. 不需要我的用户安装任何东西(所以 Powershell 已经出局了。同样,Perl、Python 和其他关于 stackoverflow 这类问题的常见建议)
  3. 用非编译语言编写(因此用户将来有机会修改它们)
  4. 相当完整的语言功能(尤其是日期/时间操作功能。我也想拥有现代概念,如子例程、递归等)
  5. 启动和控制其他程序的能力(在命令行)

从我对我的选择的匆忙审查中,看起来我的选择是

  1. VBScript
  2. 脚本
  3. 脚本

我没有时间学习或深入审查这些(或任何其他可用的 WinXP 标准安装)。我非常迫切地需要尽快挑选和破解一些东西。

(当前的危机是需要运行给定的应用程序,传递几个日期参数)。

一旦当前的危机结束,将会有更多这样的请求。

帮助我Obi Wan Stackoverflow ......你是我唯一的希望。

[编辑] 我目前的技能包括 Perl、Javascript 和 Java,所以我最喜欢使用类似于这些的东西

[编辑] 好的。我将尝试在 JScript 中编写 WSH 文件。谢谢大家......一旦事情在这里安定下来,我会告诉你事情的进展(并弄清楚接受答案)。

[编辑] 最后一切都解决了。感谢各位的快速回复。这是我给我的用户的

<job id="main">
    <script language="JScript">
// ----- Do not change anything above this line ----- //

var template = "c:\\path\\to\\program -##PARAM## --start ##date1## --end ##date2## --output F:\\path\\to\\whereever\\ouput_file_##date1##.mdb";

// Handle dates
// first, figure out what they should be
dt = new Date();
var date1 = stringFromDate(dt, 1);
var date2 = stringFromDate(dt, 2);

// then insert them into the template
template = template.replace(new RegExp("##date1##", "g"), date1);
template = template.replace(new RegExp("##date2##", "g"), date2);

// This application needs to run twice, the only difference is a single parameter
var params = ["r", "i"]; // here are the params.

// set up a shell object to run the command for us
var shellObj = new ActiveXObject("WScript.Shell");

// now run the program once for each of the above parameters
for ( var index in params )
{
    var runString = template; // set up the string we'll pass to the wondows console
    runString = runString.replace(new RegExp("##PARAM##", "g"), params[index]); // replace the parameter
    WScript.Echo(runString);

    var execObj = shellObj.Exec( runString ); 
    while( execObj.Status == 0 )
    {
        WScript.Sleep(1000); //time in milliseconds
    }
    WScript.Echo("Finished with status: " + execObj.Status + "\n");
}


// ----- supporting functions ----- //

// Given a date, return a string of that date in the format yyyy-m-d
// If given an offset, it first adjusts the date by that number of days
function stringFromDate(dateObj, offsetDays){
    if (typeof(offsetDays) == "undefined"){
        offsetDays = 0;
    }
    dateObj.setDate( dateObj.getDate() + offsetDays );

    var s = dateObj.getYear() + "-";     //Year
    s += (dateObj.getMonth() + 1) + "-"; //Month (zero-based)
    s += dateObj.getDate();              //Day

    return(s);
}

// ----- Do not change anything below this line ----- //
    </script>
</job>

显然它可能会更好......但它完成了工作并且很容易让我的用户理解和扩展自己。

4

7 回答 7

27

这些在技术上都是相同的东西,但语法不同。实际上 WScript/CScript 是引擎,VBScript 和 JScript 是语言。

个人意见如下:我个人的推荐是 JScript,因为它更让我想起一门真正的编程语言,并且让我比 VBScript更想打自己的脸。鉴于您对 javascript 的熟悉,您最好的选择是 JScript。

像其他人一样详细介绍 WScript 和 CScript 之间的区别:这些是您的 Windows Script Host 脚本的执行平台。它们本质上是相同的,而 WScript 更面向 GUI,而 CScript 更面向控制台。如果您使用 CScript 启动脚本,您将看到一个控制台窗口,但您仍然可以访问 GUI 功能,而如果您使用 WScript 启动,则没有控制台窗口,并且许多默认输出方法显示为窗口对象而不是控制台中的一行。

于 2009-10-02T19:13:16.957 回答
4

如果您喜欢 JavaScript,那么您可能会接受JScript。它是一种不错的语言,而且肯定比 VBScript 更适合复杂的脚本。

但是,Microsoft 1 讨厌JavaScript,因此您会遇到一些 API,这些 API 与 VBScript 一起使用是微不足道的,但使用 JScript 访问却很痛苦。考虑一下自己被警告...

正如窃笑所指出的,WScript 是驱动两者的引擎。

1拟人化用于注意一般缺乏光泽的支持;不得被解释为任何官方政策的证据。

于 2009-10-02T19:16:14.283 回答
2

我的选择是使用 JScript 的 WSH。您可以使用 VBScript,但为什么,当 JScript 可用时。

这是 Windows Script Host 的参考

于 2009-10-02T19:15:03.300 回答
2

不要忘记 CScript。在这里要小心,因为 Windows 脚本主机经常被大公司的组策略禁用。如果是这种情况,符合您所有标准的唯一选择是(不寒而栗)批处理。

如果这些都不适合您,那么您最好的选择可能是编译程序,您可以在其中随程序分发源代码。

于 2009-10-02T19:15:52.457 回答
2

使用 JScript。将 JScript 与 WScript/cscript 引擎一起使用与在浏览器中编写 JavaScript 之间的主要区别在于您没有浏览器安全限制。您还可以访问 ActiveX/COM 对象来操作应用程序、注册表等。事实上,您可能会花更多的时间阅读这些自定义对象和接口,而不是担心语言特性。当然,您可以获得 JavaScript 日期、正则表达式等的所有好处。

来自 MSDN的示例 JScript 应用程序可能有助于您入门。

不幸的是,Microsoft 的大多数示例脚本往往是 VBScript,但语法很容易理解,特别是如果您只是想找出 COM 接口的详细信息。

于 2009-10-02T19:29:49.450 回答
2

为了扩展对方的答案,WScript 和 CScript 是用于运行用 VBScript(类似 Visual Basic 的语法)或 JScript(类似 JavaScript 的语法)编写的脚本的程序。CScript 从控制台窗口运行脚本,因此 Echo 命令写入控制台,而 WScript 在没有窗口的情况下运行脚本,而 Echo 命令写入弹出消息框。

如果您需要合并两种语言的预先存在的代码,您可以编写同时使用 VBScript 和 JScript 的 WSH(Windows 脚本宿主)和 WSC(Windows 脚本组件)脚本,方法是将它们组合在基于 XML 的包装器中。

您还可以编写 HTA 脚本,它代表“超文本应用程序”。这些是在 Internet Explorer 中运行的带有 HTA 扩展名的 HTML 文件中的脚本代码,它允许您提供使用 HTML 控件的界面,但也可以完全访问您的系统,因为它在本地运行。

所有这些都基于自 Windows 98 以来已包含在所有 Windows 计算机中的 Windows Scripting Host 和 Active Scripting 技术。连同相当强大的基础语言,它们还使您可以访问 WMI 以获取广泛的系统和网络信息和管理,以及用于自动化 Word、Excel 等的 COM 功能。即使未安装 Access,您也可以使用 ADO 和 ADOX 创建和使用 Access MDB 文件。

于 2009-10-02T19:33:44.417 回答
2

尽管 JScript 是一种比 VB Script 更不可怕的语言,但问题是 VB Script 内置了一个更完整的有用函数库,用于日期和数字格式等功能。因此,它实际上并不像最初看起来那样简单,除非您能够编写和安装自己的帮助对象库以与 JScript 一起使用。

这里有一些细节

于 2009-10-02T19:56:47.350 回答