allfiles.vbs 如何实现显示文件的详情信息?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
我们提供的服务有:网站制作、成都网站建设、微信公众号开发、网站优化、网站认证、临邑ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的临邑网站制作公司有的时候将子目录下的所有文件的修改时间、大小、全限定名等信息导出到Excel表格中。
尝试过命令行,但不太好用——
1.对于“dir /s >1.txt”,当前目录与文件列表是分开显示的,合并起来太麻烦,而且没有文件的全限定名。
2.对于“dir /b /s >1.txt”,只有全限定名,没有修改时间、大小等详细信息。
3.对于“tree /f >1.txt”,只有目录树,没有修改时间、大小等详细信息。
在网上找了几个导出文件列表的工具,但都不太好用。于是决定自己编写。
用什么编程工具开发呢?考虑到以后可能经常改进输出内容的格式,所以用VBScript脚本来写是最方便的。
全部代码如下——
' allfiles.vbs: 显示子目录下的所有文件的修改时间、大小、全限定名等信息。输出文件版. ' Author: zyl910 ' Blog: /tupian/20230522/zyl910 ' URL: /tupian/20230522/zyl910/archive/2013/01/07/allfiles.html ' Version: V1.0 ' Updata: 2013-01-07 ' ' 输出文件是“allfiles.txt”。格式: ' Type DateLastModified Size Base Ext FullName ' D 2013-1-1 12:30:30 Temp C:\Temp ' F 2013-1-1 12:30:31 34 abc txt C:\Temp\abc.txt ' ' Type: 类型。D目录,F文件。 ' DateLastModified: 最后修改时间. ' Size: 文件大小. ' Base: 文件基本名. ' Ext: 扩展名. ' FullName: 文件的全限定名. ' 取得文件扩展名和基本名. Function GetFileExtAndBaseName(ByVal sfilename, ByRef sbasename) n = InStrRev(sfilename, ".") If n>1 Then GetFileExtAndBaseName = Mid(sfilename, n+1) sbasename = Left(sfilename, n-1) Else GetFileExtAndBaseName = "" sbasename = sfilename End If End Function ' 遍历该目录及子目录. ' ' Result: 目录和文件的总数. ' fileOut: 输出文件,用于输出遍历结果. ' fso: FileSystemObject对象. ' sPath: 目录. Function dirscan(ByRef fileOut, ByVal fso, ByVal sPath) rt = 0 Set currentFolder = Nothing 'MsgBox sPath On Error Resume Next Set currentFolder = fso.GetFolder(sPath) On Error Goto 0 If Not (currentFolder Is Nothing) Then ' Folders For Each subFolder in currentFolder.SubFolders sfull = subFolder.Path & "\" ' 全限定名. s = "D" & vbTab & subFolder.DateLastModified & vbTab & "" & vbTab & subFolder.Name & vbTab & "" & vbTab & sfull & vbCrLf fileOut.write s rt = rt + 1 rt = rt + dirscan(fileOut, fso, subFolder.Path) Next ' Files For Each f in currentFolder.Files sbase = "" sext = GetFileExtAndBaseName(f.Name, sbase) ' 扩展名. sfull = f.Path ' 全限定名. s = "F" & vbTab & f.DateLastModified & vbTab & f.Size & vbTab & sbase & vbTab & sext & vbTab & sfull & vbCrLf fileOut.write s rt = rt + 1 Next End If dirscan = rt End Function '得到脚本文件所在的当前目录 Function GetCurrentFolderFullPath(fso) GetCurrentFolderFullPath = fso.GetParentFolderName(WScript.ScriptFullName) End Function ' 测试 Sub dotest Set fso = CreateObject("Scripting.FileSystemObject") strpath = GetCurrentFolderFullPath(fso) ' 得到当前目录. Set FileObj = fso.opentextfile(strpath+"\allfiles.txt", 2, True, -1) ' 打开输出文件. ForWriting, TristateTrue. s = "Type" & vbTab & "DateLastModified" & vbTab & "Size" & vbTab & "Base" & vbTab & "Ext" & vbTab & "FullName" & vbCrLf ' 格式说明. FileObj.write s ' 写入格式说明. cnt = dirscan(FileObj, fso, strpath) ' 遍历目录及子目录. FileObj.Close ' 关闭输出文件. MsgBox "OK! " & cnt & " items.", vbOKOnly, "allfiles" End Sub ' Run Call dotest()