<script type="text/javascript"> 
 function FileList(path){
  var sf, sd;
  fso = new ActiveXObject("Scripting.FileSystemObject");
fldr   =   fso.GetFolder(path);   
  fd = new Enumerator(fldr.SubFolders);
for (; !fd.atEnd(); fd.moveNext())
 {
sd = fd.item();
alert(sd.path);
FileList(sd.path);
}
}
 FileList("e:\\pkm2"); 
</script> VBSGetFile("e:\\pkm2") function GetFile(path)  
 set  fso=CreateObject("scripting.filesystemobject")  
 'on  error   resume   next    
 set  objFolder=fso.GetFolder(path)    
 set  objSubFolders=objFolder.Subfolders      
  for  each   objSubFolder   in   objSubFolders    
nowpath=objSubFolder.path   
Wscript.echo nowpath
  GetFile(nowpath)  
  next   
 set   objFolder=nothing    
 set   objSubFolders=nothing    
 set   fso=nothing    
end   function

解决方案 »

  1.   

    你的代码只能在windows下运行,不兼容其他的浏览器,这么做没有什么意义的...
      

  2.   


    我想写个js不在浏览器上运行的,直接通过WSCRIPT执行。写成浏览器中执行是为了通过aptana调试,还不太适应呵呵。
      

  3.   

    测试没发现问题,你不会是因为加了html标签导致吧 囧function FileList(path){
    var sf, sd;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    fldr = fso.GetFolder(path);  
    fd = new Enumerator(fldr.SubFolders);
    for (; !fd.atEnd(); fd.moveNext())
    {
    sd = fd.item();
    WScript.Echo(sd.path); // 别用alert
    FileList(sd.path);
    }
    }
      

  4.   


    这段代码在wscript中执行,只能遍历每个文件夹下的第一个文件夹,若是文件夹下包含多个文件夹,除了第一个外都不遍历。
      

  5.   

    本帖最后由 zswang 于 2010-05-11 13:35:48 编辑
      

  6.   


    测试成功!!没搞过javascript,谢谢解惑。难道一个函数中前面定义的变量不是局部变量?进入递归后,也是先定义了fd呀,看来的翻翻基本知识的书了。谢谢。
      

  7.   

    变量范围
    JScript 有两种变量范围:全局和局部。如果在任何函数定义之外声明了一个变量,则该变量为全局变量,且该变量的值在整个持续范围内都可以访问和修改。如果在函数定义内声明了一个变量,则该变量为局部变量。每次执行该函数时都会创建和破坏该变量;且它不能被该函数外的任何事物访问。
    局部变量一定要以var申明,否则是全局变量;
     也就是说,如果它出现于赋值表达式的左边但没有用 var 声明 — 那么将把它创建为全局变量。在这里我把sd和fd搞混了以为声明了,谢谢zswang,感谢所有热心帮助的兄弟!