在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);
以這樣的例子來看,對於熟悉JavaScript程式語言的人來說,WSH提供不需額外學習的方式,就可以自行依需求設計Windows作業系統上的程式來完成工作。
雖然WSH不是新技術,只是最近又開始接觸JavaScript程式語言,就再把這東西溫習一下,順便作一下筆記。解決問題的方法很多,但是要提升解決問題的效率,最好的方法就是重複利用已經學會的技巧。既然JavaScript程式語言是近來工作上的需求,就不要浪費已經學會的東西,想辦法讓它有更多應用的場合。再加上JavaScript使用人口廣大,碰上問題時也比較有詢問的管道,減少自行摸索的時間。
沒有留言:
張貼留言