有的时候将子目录下的所有文件的修改时间、大小、全限定名等信息导出到Excel表格中。
尝试过命令行,但不太好用——
1.对于“dir /s >1.txt”,当前目录与文件列表是分开显示的,合并起来太麻烦,而且没有文件的全限定名。
2.对于“dir /b /s >1.txt”,只有全限定名,没有修改时间、大小等详细信息。
3.对于“tree /f >1.txt”,只有目录树,没有修改时间、大小等详细信息。
在网上找了几个导出文件列表的工具,但都不太好用。于是决定自己编写。
用什么编程工具开发呢?考虑到以后可能经常改进输出内容的格式,所以用VBScript脚本来写是最方便的。
全部代码如下——
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | ' allfiles.vbs: 显示子目录下的所有文件的修改时间、大小、全限定名等信息。输出文件版.' Author: zyl910' Blog: http://www.cnblogs.com/zyl910' URL: http://www.cnblogs.com/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: 文件的全限定名. ' 取得文件扩展名和基本名.FunctionGetFileExtAndBaseName(ByValsfilename,ByRefsbasename) n = InStrRev(sfilename, ".") Ifn>1Then GetFileExtAndBaseName = Mid(sfilename, n+1) sbasename = Left(sfilename, n-1) Else GetFileExtAndBaseName = "" sbasename = sfilename EndIfEndFunction ' 遍历该目录及子目录.'' Result: 目录和文件的总数.' fileOut: 输出文件,用于输出遍历结果.' fso: FileSystemObject对象.' sPath: 目录.Functiondirscan(ByReffileOut,ByValfso,ByValsPath) rt = 0 SetcurrentFolder = Nothing 'MsgBox sPath OnErrorResumeNext SetcurrentFolder = fso.GetFolder(sPath) OnErrorGoto 0 IfNot(currentFolderIsNothing)Then ' Folders ForEachsubFolder 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 ForEachf 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 EndIf dirscan = rtEndFunction '得到脚本文件所在的当前目录FunctionGetCurrentFolderFullPath(fso) GetCurrentFolderFullPath = fso.GetParentFolderName(WScript.ScriptFullName)EndFunction ' 测试Subdotest Setfso = CreateObject("Scripting.FileSystemObject") strpath = GetCurrentFolderFullPath(fso) ' 得到当前目录. SetFileObj = 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"EndSub ' RunCalldotest() |
将上面的代码复制到记事本,并保存为“allfiles.vbs”。然后将其复制到欲导出的目录,双击运行,该脚本便会将子目录下的所有文件信息导出到“allfiles.txt”中。因为该文本文件是以Tab分隔各列的,能很方便的复制到Excel中。
例如该脚本对VC2005的include目录的输出结果为——
Type DateLastModified Size Base Ext FullName
D 2011-9-5 13:16:14 CodeAnalysis C:\VS8_2005\VC\include\CodeAnalysis\
F 2006-12-1 22:16:08 5720 sourceannotations h C:\VS8_2005\VC\include\CodeAnalysis\sourceannotations.h