簡體   English   中英

VBScript、JScript、Wscript……天哪

[英]VBScript, JScript, Wscript … oh my

我需要為 WinXP 編寫一些腳本來支持 Big Financial Corp 的一些分析師。請幫助我決定哪種類型的 Windows 腳本最適合我的需要。

我的需求似乎很簡單(無論如何對我來說)

  1. 在 WinXP Pro SP2(2002 版)上運行
  2. 不需要我的用戶安裝任何東西(所以 Powershell 已經過時了。對於 stackoverflow 上的這些類型的問題,同樣是 Perl、Python 和其他常見的建議)
  3. 用非編譯語言編寫(因此用戶將來有機會修改它們)
  4. 相當完整的語言功能(尤其是日期/時間操作函數。我還想擁有現代概念,如子程序、遞歸等)
  5. 啟動和控制其他程序的能力(在命令行中)

從我對我的選擇的匆忙回顧來看,我的選擇似乎是

  1. 腳本
  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>

顯然它可以更好......但它完成了工作並且很容易讓我的用戶理解和擴展自己。

這些在技術上都是相同的東西,但語法不同。 實際上 WScript/CScript 是引擎,VBScript 和 JScript 是語言。

個人認為只有如下:我個人的建議是JScript的,因為它讓我想起更多的是真正的編程語言,並讓我想沖自己的臉往往比VBScript中。 考慮到您對 javascript 的熟悉程度,您最好的選擇是 JScript。

像其他人一樣更詳細地了解 WScript 和 CScript 之間的區別:這些是用於 Windows 腳本宿主的腳本的執行平台。 它們本質上是一樣的,而 WScript 更面向 GUI,而 CScript 更面向控制台。 如果您使用 CScript 啟動腳本,您將看到一個控制台窗口,但您仍然可以訪問 GUI 功能,而如果您使用 WScript 啟動,則沒有控制台窗口,並且許多默認輸出方法顯示為窗口對象而不是控制台中的一行。

如果您喜歡 JavaScript,那么您可能會接受JScript 它是一種不錯的語言,當然比 VBScript 更適合復雜的腳本。

但是,Microsoft 1討厭JavaScript,因此您會遇到一些 API,這些 API 與 VBScript 一起使用很簡單,但使用 JScript 訪問卻很痛苦。 考慮一下自己警告...

正如士力架所指出的,WScript 是驅動兩者的引擎。

1 Anthropomorphization 用於說明一般缺乏光澤的支持; 不得被解釋為任何官方政策的證據。

我的選擇是使用 JScript 的 WSH。 您可以使用 VBScript,但是為什么,當 JScript 可用時。

這是 Windows 腳本宿主的參考

不要忘記 CScript。 在這里要小心,因為 Windows 腳本主機經常被大公司的組策略禁用。 如果是這種情況,唯一符合您所有標准的選項是(不寒而栗)批次。

如果這些都不適合您,那么您最好的選擇可能是編譯程序,您可以在其中隨程序一起分發源代碼。

使用 JScript。 將 JScript 與 WScript/cscript 引擎一起使用與在瀏覽器中編寫 JavaScript 之間的主要區別在於您沒有瀏覽器安全限制。 您還可以訪問 ActiveX/COM 對象來操作應用程序、注冊表等。事實上,與擔心語言特性相比,您可能會花更多的時間閱讀這些自定義對象和接口。 當然,您可以獲得 JavaScript 日期、正則表達式等的所有好處。

來自 MSDN 的示例 JScript 應用程序可能會幫助您入門。

不幸的是,大多數 Microsoft 的示例腳本往往是 VBScript,但其語法很容易遵循,尤其是當您只是想挑選 COM 接口詳細信息時。

為了稍微擴展其他人的答案,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 Scripting Host 和 Active Scripting 技術,自 Windows 98 以來,所有 Windows 計算機都包含這些技術。除了相當強大的基礎語言外,它們還使您可以訪問 WMI 以獲取廣泛的系統和網絡信息以及管理,以及用於自動化 Word、Excel 等的 COM 功能。即使未安裝 Access,您也可以使用 ADO 和 ADOX 創建和使用 Access MDB 文件。

盡管 JScript 是一種遠沒有 VB Script 可怕的語言,但問題是 VB Script 有一個更完整的內置有用函數庫,用於日期和數字格式化等。 因此,它實際上並不像最初出現的那樣容易,除非您能夠編寫和安裝自己的輔助對象庫以與 JScript 一起使用。

一些細節在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM