[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

回复 9# ghost-jason


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

TOP

回复 22# yu2n


    谢谢大神

TOP

回复 20# ghost-jason

函数 ScanFolder(ByVal strPath)
功能:获取指定路径下(参数)所有文件(夹)的路径,保存到一个字符串,函数将返回这个字符串。
使用:例如要知道 D:\ 下面有什么文件(夹)
  1. Dim strPath, strInfo
  2. strPath = "D:\"
  3. strInfo = ScanFolder(strPath)
  4. Msgbox strInfo
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    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 就知道了。
我这里重复贴一下,相信你会一目了然:
  1. VBS 文件操作对象FSO大全
  2. http://blog.sina.com.cn/s/blog_611f50100100w7tv.html
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

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

TOP

回复 9# ghost-jason


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

TOP

回复 8# yu2n


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

TOP

返回列表