Мне нужно написать несколько сценариев для WinXP для поддержки некоторых аналитиков из Big Financial Corp. Пожалуйста, помогите мне решить, какой тип сценариев Windows лучше всего подходит для моих нужд.
Мои потребности кажутся довольно простыми (во всяком случае, мне)
- работает на WinXP Pro SP2 (версия 2002)
- не требует, чтобы мои пользователи что-либо устанавливали (так что Powershell отсутствует. Аналогично Perl, Python и другие распространенные предложения по этим типам вопросов по stackoverflow)
- написано на некомпилированном языке (чтобы у пользователей была возможность изменить их в будущем)
- достаточно полные возможности языка (особенно функции манипуляции с датой / временем. Я также хотел бы иметь современные концепции, такие как подпрограммы, рекурсия и т. Д.)
- возможность запуска и управления другими программами (из командной строки)
Из моего поспешного просмотра моих вариантов, похоже, мой выбор
- 1020 * VBScript *
- WScript
- JScript
У меня нет времени, чтобы изучить или сделать углубленный обзор этих (или того, что доступно в стандартной установке WinXP). Мне нужно срочно взять что-нибудь и как можно быстрее взломать что-то вместе.
(Текущий кризис - это необходимость запустить данное приложение, передавая несколько параметров даты).
Как только текущий кризис закончится, таких запросов будет больше.
Помоги мне Оби Ван Переполнение стека ... ты моя единственная надежда.
[edit] Мой текущий набор навыков включает в себя Perl, Javascript и Java, поэтому мне удобнее всего использовать что-то похожее на эти
[править] ок. Я попробую написать файл WSH на JScript. Спасибо всем ... Я дам вам знать, как это происходит (и выясню, как принять ответ), как только все немного успокоится.
[править] В конце все получилось. Спасибо за быстрые ответы, ребята.
Вот что я дал своему пользователю
<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>
Ясно, что это могло бы быть лучше ... но оно выполнило свою работу и достаточно легко для моего пользователя, чтобы понять и расширить себя.