WScript中的通配符文件搜索

时间:2012-05-10 18:08:24

标签: wsh jscript file-search

我需要使用JScript获取与某个通配符模式匹配的文件夹中的所有文件。例如:

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
    }
}

1 个答案:

答案 0 :(得分: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);
    }
}