我正在编写一个 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) 会导致运行时错误。如果我尝试循环遍历集合,则不会执行循环。
有人提示我如何访问文件集合中的项目吗?
使用
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
对象,将提供这些功能来帮助迭代。
.atEnd()
检查我们是否已到达集合的末尾。.moveNext()
转到集合中的下一个项目。.item()
获取当前项目。