我需要为 WinXP 编写一些脚本来支持 Big Financial Corp 的一些分析师。请帮助我确定哪种类型的 Windows 脚本最适合我的需要。
我的需求似乎很简单(无论如何对我来说)
- 在 WinXP Pro SP2(2002 版)上运行
- 不需要我的用户安装任何东西(所以 Powershell 已经出局了。同样,Perl、Python 和其他关于 stackoverflow 这类问题的常见建议)
- 用非编译语言编写(因此用户将来有机会修改它们)
- 相当完整的语言功能(尤其是日期/时间操作功能。我也想拥有现代概念,如子例程、递归等)
- 启动和控制其他程序的能力(在命令行)
从我对我的选择的匆忙审查中,看起来我的选择是
- VBScript
- 脚本
- 脚本
我没有时间学习或深入审查这些(或任何其他可用的 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>
显然它可能会更好......但它完成了工作并且很容易让我的用户理解和扩展自己。