WSH/Javascript:如何访问集合项目

问题描述 投票:0回答:1

我正在编写一个 JavaScript,它将在 Windows Scripting Host 的命令行中使用 cscript.exe 执行。我需要 JSON 解析,所以我决定使用 JavaScript 而不是 VBScript。

现在我正在尝试访问文件夹中的所有文件。创建文件夹对象并获取文件集合似乎可行,但我无法访问集合中的项目。

我的代码如下所示:

var folder = fso.GetFolder("mypath");
WScript.Echo( "folder=" + folder.Path + " " + folder.Size );
var files = folder.Files;
WScript.Echo( "(files==null)=" + (files==null)); // returns false
WScript.Echo( "typeof files= " + typeof files ); // returns object
WScript.Echo( "files.Count=" + files.Count );    // returns the correct number of files
WScript.echo( typeof files[0] );                 // returns undefined
WScript.echo( typeof files.Item(0) );            // Invalid procedure call or argument
WScript.echo( typeof files(0) );                 // Invalid procedure call or argument
for( var file in files ) { }                     // Loop is not executed

根据documentation文件夹。Files应该返回一个集合。这似乎有效,至少我可以调用 files.Count 并且它返回正确的文件数量。然而,我随后访问这些项目的尝试都失败了。 files[index] 返回未定义,并且 documentation 中描述的方法 files.Item(index) 或 files(index) 会导致运行时错误。如果我尝试循环遍历集合,则不会执行循环。

有人提示我如何访问文件集合中的项目吗?

javascript wsh
1个回答
0
投票

使用

Enumerator
对象,您可以迭代
WSH
JavaScript

中的文件
var fso = new ActiveXObject("Scripting.FileSystemObject");
var folder = fso.GetFolder("d:\\Projects\\EVCC Garmin\\evcc\\icons");
WScript.Echo("folder=" + folder.Path + " " + folder.Size);

var files = folder.Files;
WScript.Echo("(files==null)=" + (files == null)); // returns false
WScript.Echo("typeof files= " + typeof files); // returns object
WScript.Echo("files.Count=" + files.Count); // returns the correct number of files


const fileEnumerator = new Enumerator(files);
for (; !fileEnumerator.atEnd(); fileEnumerator.moveNext()) {
    var file = fileEnumerator.item();
    WScript.Echo("File name: " + file.Name);
}

Enumerator
对象,将提供这些功能来帮助迭代。

  1. .atEnd()
    检查我们是否已到达集合的末尾。
  2. .moveNext()
    转到集合中的下一个项目。
  3. .item()
    获取当前项目。
© www.soinside.com 2019 - 2024. All rights reserved.