【问题标题】:Wildcard file search in WScriptWScript 中的通配符文件搜索
【发布时间】:2012-05-10 18:08:23
【问题描述】:

我需要使用 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
    }
}

【问题讨论】:

    标签: wsh jscript file-search


    【解决方案1】:

    另一种方法是转至命令行并使用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);
        }
    }
    

    【讨论】:

    • 这似乎是最好的方法。我想我会坚持使用正则表达式,但你回答了这个问题。
    猜你喜欢
    • 2016-07-25
    • 1970-01-01
    • 2011-03-21
    • 2021-10-29
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多