2010年11月13日 星期六

在Windows作業系統執行JavaScript程式

在Windows作業系統上要完成批次性的工作,對於已長期接觸電腦的人來說,第一個想到的當然是bat檔案;這是不需要學習複雜程式語言的情形下,可以快速完成工作的方式。只是對比Linux系統上的bash來說,bat檔案可以使用的功能實在薄弱,複雜一點的功能往往都還是要借助其它工具的輔助。Microsoft也不是沒有注意到這一點,後續推出WSH(Windows Script Host),讓使用者可以藉由直譯式程式語言的方便性,讓使用者有更大的彈性自行設計合適的程式來處理工作。

有關WSH更進一步的介紹可以參考這篇「Windows Server System 系統管理之 Windows Script Host」,介紹的更加詳細。而若是想要取得更多的範例說明,推薦參考「JScript 程式設計與應用:WSH」,網頁內容是作者出版書籍的部份章節,除了介紹WSH外,還有作者收集的範例程式,可以更加了解WSH的實際應用。

底下這個範例就是參考「JScript 程式設計與應用:WSH」提供的範例自行修改,使用JavaScript程式語言取得D槽根目錄下的所有檔案:
/**
 *
 * 取得目錄內之檔案/目錄列表。
 *
 * @author ace
 *
 * @version 2010/11/11 v0.1
 *
 * @param {String} astrPath 搜尋路徑。
 *
 * @return {Array} 檔案列表。
 *
 * @requires Scripting.FileSystemObject
 *
 * @see JavaScript 程式設計
 *
 */
function getFolderList(astrPath) {

    var objReturn = new Array();

    var objFSO = new ActiveXObject("Scripting.FileSystemObject");
    var objFolder = objFSO.GetFolder(astrPath);

    var objFilesEnum = new Enumerator(objFolder.Files);
    var objSubFoldersEnum = new Enumerator(objFolder.SubFolders);

    // 取得所有檔案。
    while (objFilesEnum.atEnd() == false) {

        objReturn.push(objFilesEnum.item());

        objFilesEnum.moveNext();
    }

    // 取得所有目錄。
    while (objSubFoldersEnum.atEnd() == false) {

        objReturn.push(objSubFoldersEnum.item());

        objSubFoldersEnum.moveNext();
    }

    return objReturn;
}

var objFileList = new Array();
objFileList = getFolderList("D:\\");

var strDisplay = new String("");
for (var intIndex = 0; intIndex < objFileList.length; intIndex++) strDisplay += objFileList[intIndex] + "\n";

WScript.Echo(strDisplay);

執行結果就像底下圖示(使用cscript.exe執行):

以這樣的例子來看,對於熟悉JavaScript程式語言的人來說,WSH提供不需額外學習的方式,就可以自行依需求設計Windows作業系統上的程式來完成工作。

雖然WSH不是新技術,只是最近又開始接觸JavaScript程式語言,就再把這東西溫習一下,順便作一下筆記。解決問題的方法很多,但是要提升解決問題的效率,最好的方法就是重複利用已經學會的技巧。既然JavaScript程式語言是近來工作上的需求,就不要浪費已經學會的東西,想辦法讓它有更多應用的場合。再加上JavaScript使用人口廣大,碰上問題時也比較有詢問的管道,減少自行摸索的時間。

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...