返回列表 发帖

[问题求助] vbs如何实现输出指定路径/目录/文件夹下所有子文件夹及文件的路径

本帖最后由 pcl_test 于 2016-9-3 15:37 编辑

如果哪位大神牛的话顺便把文件夹下有哪些东西显示出来。文件夹下存放的东西,子文件夹下存放的东西。小弟只当学习。大神就当重新温习温习。谢谢啦!!!

回复 9# ghost-jason


    遍历代码分析。自己分析
Function getfolderpathone    '起个容易理解的函数名
Set fso = CreateObject("scripting.filesystemobject") '创建文件系统对象
getfolderpathone = fso.GetParentFolderName(WScript.ScriptFullName) '得到当前脚本的父路径(绝对路径)
End Function
Function getfolderpath(test) '创建遍历函数名称
Set fso = CreateObject("scripting.filesystemobject")'同样创建文件系统对象
Set folderpath = fso.GetFolder(test)                  '得到当前单个文件夹的路径
Set subfolders = folderpath.SubFolders                    '获取的个文件夹下多个个子文件夹路径
For Each subfolder In subfolders                         '遍历一个一个显示单个子文件存储到一个变量当中
getfolderpath= subfolder.Path & vbcrlf  & getfolderpath & getfolderpath(subfolder.Path) '得到单个子文件夹的路径
'getfolderpath(subfolder.Path)  至于这个函数test=subfolder.path 起到循环子文件夹下个子文件夹
next
End Function
MsgBox getfolderpath(getfolderpathone) '这个函数实际上  test = getfolderhone  也就是当前脚本所在的父文件夹的路径COPY

TOP

回复 22# yu2n


    谢谢大神

TOP

回复 20# ghost-jason

函数 ScanFolder(ByVal strPath)
功能:获取指定路径下(参数)所有文件(夹)的路径,保存到一个字符串,函数将返回这个字符串。
使用:例如要知道 D:\ 下面有什么文件(夹)
Dim strPath, strInfo
strPath = "D:\"
strInfo = ScanFolder(strPath)
Msgbox strInfoCOPY
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 15# ghost-jason

1. 那是【函数】Function(【过程】Sub)的【参数】,也是一种【变量】。
2. 函数自身调用自身,这里是【递归】。要掌握【函数返回值】的运用。

注:符号【】里面的内容必须掌握。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 13# yu2n


    大神我是菜鸟。那个长代码我会用了。这个短的咋调用了

TOP

回复 18# DAIC


    谢了

TOP

TOP

回复 13# yu2n


    恩恩。我试了这个代码确实厉害。效果不错。膜拜大神

TOP

回复 12# DAIC


    恩恩。我对递归确实不是很了解。请问哪里有那方面的资料

TOP

回复 14# yu2n


    我就是不明白图上画红线的地方就我标的那4点其他代码我都明白

TOP

回复 9# ghost-jason
这段代码不难,如果你要明白这个函数每行语句的意思,直接百度查 vbs fso 就知道了。
我这里重复贴一下,相信你会一目了然:
VBS 文件操作对象FSO大全
http://blog.sina.com.cn/s/blog_611f50100100w7tv.htmlCOPY
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 11# ghost-jason
上面那段是函数,不是程序。如果你在末尾加下面一句,那他就是一个扫描D:的实例程序(请以 CScript.exe  脚本.vbs 的方式运行):
Call Demo("D:\")COPY
如果不是对文件数目很大的目录扫描,可以使用下面的代码(同时也是一个实例程序):
Dim strPath
strPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERPROFILE%")
WScript.Echo ScanFolder(strPath)
Function ScanFolder(ByVal strPath)
    Dim arr()
    ReDim Preserve arr(0)
    Call SCAN_FOLDER(arr, strPath)
    ReDim Preserve arr(UBound(arr) - 1)
    ScanFolder = Join(arr, vbCrLf)
End Function
Function SCAN_FOLDER(ByRef arr, ByVal folderSpec)
    On Error Resume Next
    Dim fso, objItems, objFile, objFolder
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set objItems = fso.GetFolder(folderSpec)
    If Right(folderSpec, 1) <> "\" Then folderSpec = folderSpec & "\"
    If (Not fso.FolderExists(folderSpec)) Then Exit Function
    For Each objFile In objItems.Files
        arr(UBound(arr)) = objFile.Path
        ReDim Preserve arr(UBound(arr) + 1)
    Next
    For Each objFolder In objItems.subfolders
        Call SCAN_FOLDER(arr, objFolder.Path)
    Next
    arr(UBound(arr)) = folderSpec
    ReDim Preserve arr(UBound(arr) + 1)
End FunctionCOPY
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 9# ghost-jason


    你可能需要了解一些基础的编程知识,比如:递归。

TOP

回复 8# yu2n


    你给的这个长代码怎么运行后没反应啊。我想看看效果

TOP

返回列表