在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使用人口廣大,碰上問題時也比較有詢問的管道,減少自行摸索的時間。

沒有留言:
張貼留言