在Windows上选择:VBScript,JScript,Wscript

a14dhokn  于 7个月前  发布在  Windows
关注(0)|答案(8)|浏览(79)

我需要为WinXP编写一些脚本,以支持大金融公司的一些分析师。我需要决定哪种类型的Windows脚本最适合我的需要。
我的需求似乎很简单(无论如何)
1.在WinXP Pro SP2(版本2002)上运行
1.不需要我的用户安装任何东西(所以PowerShell已经过时了。同样,Perl,Python和其他关于堆栈溢出的常见建议)
1.用非编译语言编写(因此用户有机会在将来修改它们)
1.合理完整的语言功能(特别是日期/时间操作功能。我想也有现代的概念,如子程序,递归等)
1.启动和控制其他程序的能力(在命令行)
从我匆忙回顾我的选择,它看起来像我的选择是

  1. VBScript
  2. WScript
  3. JScript
    我没有时间去学习或深入研究这些东西(或者其他任何标准的WinXP安装),我需要尽可能快地挑选和破解一些东西。
    (当前的危机是需要运行给定的应用程序,传递几个日期参数)。
    一旦目前的危机结束,将会有更多这样的请求。

编辑

我目前的技能包括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>

字符串
显然它可以更好.但它完成了工作,很容易让我的用户理解和扩展自己。

fdbelqdn

fdbelqdn1#

这些在技术上都是相同的东西,但语法不同。实际上,WScript/CScript是引擎,VBScript和JScript是语言。
个人意见仅如下:我个人推荐使用JScript,因为它让我想起了一种真实的编程语言,而且比VBScript更让我想揍自己的脸。考虑到你对JavaScript的熟悉程度,你最好的选择是JScript。
更详细地介绍WScript和CScript之间的区别,就像其他人一样:这些是Windows脚本主机的脚本的执行平台。它们本质上是一样的,而WScript更面向GUI,而CScript更面向控制台。如果用CScript启动脚本,您将看到一个控制台窗口,但您仍然可以访问GUI功能,然而,如果你从WScript开始,没有控制台窗口,并且许多默认的输出方法显示为窗口对象,而不是控制台中的一行。

yyhrrdl8

yyhrrdl82#

如果你喜欢JavaScript,你可能会接受JScript。它是一种不错的语言,当然比VBScript更适合复杂的脚本。
然而,Microsoft 1 * 讨厌 * JavaScript,所以你会遇到一些API,它们与VBScript一起使用很简单,但使用JScript访问却很痛苦。
正如Snicker所指出的,WScript是驱动两者的引擎。
[1]拟人化通常用来表示一般性的缺乏光彩的支持;不应被解释为任何官方政策的证据。

4bbkushb

4bbkushb3#

尽管JScript是一种远没有VB Script那么糟糕的语言,但问题是VB Script中内置了一个更完整的有用函数库,可以处理日期和数字格式等问题。因此,它实际上并不像最初看起来那么容易选择,除非您能够编写并安装自己的helper对象库,以便与JScript一起使用。
Some details here的一个。

ergxz8rk

ergxz8rk4#

不要忘记CScript。在这里要小心,因为在大公司,Windows脚本主机通常被组策略禁用。如果是这种情况,唯一符合您所有标准的选项是(shrimp)批处理。
如果这些都不适合你,你最好的选择可能是一个编译的程序,你可以把源代码和程序一起分发。

am46iovg

am46iovg5#

使用JScript。在WScript/cscript引擎中使用JScript与在浏览器中编写JavaScript之间的一个关键区别是,您没有浏览器安全限制。您还可以访问ActiveX/COM对象来操作应用程序、注册表等。实际上,您可能会花费更多的时间阅读这些自定义对象和接口,而不是担心语言功能。当然,你可以得到JavaScript日期、正则表达式等的所有好处。
sample JScript app from MSDN可能会帮助您开始。
不幸的是,Microsoft的大多数示例脚本往往是VBScript,但语法很容易理解,特别是如果您只是想了解COM接口的细节。

uqzxnwby

uqzxnwby6#

WScript和CScript是用来运行用VBScript(类似于Visual Basic的语法)或JScript(类似于JavaScript的语法)编写的脚本的程序。CScript从控制台窗口运行脚本,因此Echo命令写入控制台,而WScript在没有窗口的情况下运行脚本,Echo命令写入弹出消息框。
如果您需要合并这两种语言中预先存在的代码,则可以编写使用VBScript和JScript的WSH(Windows脚本主机)和WSC(Windows脚本组件)脚本,方法是将它们组合在基于XML的 Package 器中。
您也可以编写HTA脚本,它代表“超文本应用程序”。这些是HTML文件中的脚本代码,带有在Internet Explorer中运行的HTA扩展名,它允许您使用HTML控件提供界面,但也可以完全访问您的系统,因为它们在本地运行。
所有这些都是基于Windows脚本主机和活动脚本技术,这些技术自Windows 98以来一直包含在所有Windows计算机中。沿着相当强大的基础语言,它们还给予您访问扩展系统和网络信息和管理的权限,以及自动化Word的COM功能,Excel等。即使未安装Access,也可以使用ADO和ADOX创建和使用Access MDB文件。

42fyovps

42fyovps7#

我的选择是使用JScript的WSH。你可以使用VBScript,但为什么,当JScript可用时。
这是一个reference的Windows脚本主机。

cczfrluj

cczfrluj8#

截至2023年10月,VBScript已被悄悄弃用,因此您应该避免将其用于您希望长时间工作的新脚本。根据https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features
VBScript已被弃用。在Windows的未来版本中,VBScript将在从操作系统中删除之前按需作为一项功能提供。
和https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features-resources#vbscript上发布:
在将来的Windows版本中停用之前,VBScript将作为按需功能提供。最初,将预安装VBScript按需功能,以便在您准备停用VBScript时不间断地使用。
如果您正在旧版本的Windows上使用VBScript,或者您正在当前的Windows 11上使用它,但只是为了一次性脚本,您不必担心,因为它现在仍然可用,但如果您正在为未来编写脚本,考虑使用更现代的脚本语言,如PowerShell或Python(尽管我会想念VBScript中与COM的轻松集成,而不是PowerShell中相同任务的冗长)。

相关问题