You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用ActiveXObject(Scripting.FileSystemObject)与JS获取子文件夹名称失败

问题分析与解决办法

你的两段代码都存在两个核心问题,咱们一步步拆解清楚:

1. 路径的转义错误

在JavaScript字符串里,反斜杠\是转义字符,你写的D:\path\to\myfolder\会被解析成无效路径——比如\p会被当成特殊转义序列,实际传递给FileSystemObject的路径根本不是你预期的目标文件夹路径。

解决办法二选一:

  • 把路径里的反斜杠改成双反斜杠:D:\\path\\to\\myfolder
  • 直接用正斜杠替代反斜杠:D:/path/to/myfolder(Windows系统完全支持正斜杠作为路径分隔符,还不用考虑转义问题)

2. SubFolders集合的遍历方式错误

SubFolders是FileSystemObject返回的Folder集合对象,不是普通的JavaScript数组,所以:

  • 第一段代码里的subfolders.length根本不存在(集合用Count属性获取元素数量),而且不能用下标subfolders[i]直接访问元素;
  • 第二段代码里的for...in会遍历集合对象的自身属性(比如Count、Item这些方法),而不是每个子文件夹,所以subfolder是字符串类型的属性名,不是Folder对象,自然没有.Name属性。

正确的遍历方式

使用Enumerator对象来遍历这个ActiveX集合(这是处理此类集合的标准方法):

var fso = new ActiveXObject('Scripting.FileSystemObject');
var targetFolder = fso.GetFolder('D:\\path\\to\\myfolder'); // 注意转义后的路径
var subFolders = targetFolder.SubFolders;
var enumFolders = new Enumerator(subFolders);

for (; !enumFolders.atEnd(); enumFolders.moveNext()) {
    var currentFolder = enumFolders.item();
    alert(currentFolder.Name);
}

或者用Count属性结合Item方法遍历(注意FSO集合的下标是从1开始的,不是0):

var fso = new ActiveXObject('Scripting.FileSystemObject');
var targetFolder = fso.GetFolder('D:/path/to/myfolder'); // 用正斜杠更省心
var subFolders = targetFolder.SubFolders;

for (var i = 1; i <= subFolders.Count; i++) {
    var currentFolder = subFolders.Item(i);
    alert(currentFolder.Name);
}

额外提醒:HTA运行时要确保本地系统允许ActiveX控件运行(本地HTA默认是允许的,但如果是网络加载的可能会有安全限制),同时要保证目标路径确实存在,否则GetFolder会直接抛出错误。

内容的提问来源于stack exchange,提问作者stckvrw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:52:43