2012-05-10 42 views
2

我需要使用JScript獲取與特定通配符模式匹配的文件夾中的所有文件。例如:WScript中的通配符文件搜索

var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var folderName = "C:\\TRScanFolder\\"; 
var folder = fso.GetFolder(folderName); 
var searchPattern = "1001-*POD*.*" 
// Now I need a list of all files matching the search pattern 

我知道我可以通過folder.Files訪問集合和對正則表達式測試的名字,但我寧願只讓Windows做一個搜索並獲得唯一的那些匹配。這主要是爲了提高性能,因爲文件夾中可能有幾百個文件,但只有少數是我想要的文件。

是否有一個功能或我可以用來做搜索的東西?或者我應該堅持一個循環和正則表達式?

編輯:在這裏,我得到了一個正則表達式。有沒有辦法做到這一點?

var regex = /^1001-.*POD.*\..*$/i; 
var files = new Enumerator(folder.Files); 
for (files.moveFirst(); !files.atEnd(); files.moveNext()) 
{ 
    var fileAttachment = files.item(); 
    if (regex.test(fileAttachment.Name)) 
    { 
     // Do stuff 
    } 
} 

回答

3

一種替代方法是在命令行輸出並使用dir命令。

var wsh = new ActiveXObject("WScript.Shell"); 
var fso = new ActiveXObject("Scripting.FileSystemObject"); 
var dirName = "C:\\someFolder"; 
var pattern = "s*"; 
var fileName; 

var oExec = wsh.Exec('%comspec% /c dir /on /b "' + dirName + '\\' + pattern + '"'); 

// wait for dir command to finish 
while (oExec.Status === 0) { 
    WScript.Sleep(100); 
} 

// process output 
while (!oExec.StdOut.AtEndOfStream) { 
    fileName = oExec.StdOut.ReadLine(); 

    if (fso.FileExists(fso.BuildPath(dirName, fileName))) { 
     //do stuff 
     WScript.Echo(fileName); 
    } 
} 
+0

這似乎是最好的方法。我想我會堅持正則表達式,但是你回答了這個問題。 –