<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
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
我想写个js不在浏览器上运行的,直接通过WSCRIPT执行。写成浏览器中执行是为了通过aptana调试,还不太适应呵呵。
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);
}
}
这段代码在wscript中执行,只能遍历每个文件夹下的第一个文件夹,若是文件夹下包含多个文件夹,除了第一个外都不遍历。
测试成功!!没搞过javascript,谢谢解惑。难道一个函数中前面定义的变量不是局部变量?进入递归后,也是先定义了fd呀,看来的翻翻基本知识的书了。谢谢。
JScript 有两种变量范围:全局和局部。如果在任何函数定义之外声明了一个变量,则该变量为全局变量,且该变量的值在整个持续范围内都可以访问和修改。如果在函数定义内声明了一个变量,则该变量为局部变量。每次执行该函数时都会创建和破坏该变量;且它不能被该函数外的任何事物访问。
局部变量一定要以var申明,否则是全局变量;
也就是说,如果它出现于赋值表达式的左边但没有用 var 声明 — 那么将把它创建为全局变量。在这里我把sd和fd搞混了以为声明了,谢谢zswang,感谢所有热心帮助的兄弟!