2

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

1 に答える 1

3

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);
    }
}
于 2012-05-11T03:45:55.580 に答える