文件列手0.1体验版(类似dir,VBScript语言)

'****************开始******************
Option Explicit
Public fso, CurrentName, CurrentPath, Extension
Dim Response, Answer, Result, Begin, Over


'-----初始化常量
Set fso=CreateObject("Scripting.FileSystemObject")
CurrentName=WScript.ScriptFullName    '获取FileList.vbs当前完整路径名称
CurrentPath=Left(CurrentName,InstrRev(CurrentName,"\"))    '获取当前所在完整文件夹名称
Extension=":iso:bin:zip:exe:"      '预定被搜索文件的后缀名
Result=";文件列手(FileLister)v0.1(2005-01-09)由'MBE Player'制作。版权所有,免费使用。" & vbCrLf & ";" & vbCrLf


'-----询问是否还要添加其他后缀名,并处理返回的信息:重新输入或退出程序
Do
Do
  Extension=InputBox("●默认搜索 .iso,.bin,.exe,.zip 文件。" & vbCrLf & "●可以在下栏中更改和添加后缀名。" & vbCrLf & "●注意用英文冒号“:”分隔各后缀名。" & vbCrLf & "●不支持通配符,但可以用一个英文“*”指示搜索所有文件。" & vbCrLf & "●错误的输入将造成无法预料的后果,不过在执行之前你还有机会回到这里重新输入。","输入欲搜索的后缀名","iso:bin:exe:zip:img:rar")
  If Extension="" Then
    Response=MsgBox ("没有指定后缀名" & vbCrLf & "你是想重新输入还是想退出洗手不干?",vbRetryCancel or vbCritical or vbDefaultButton2,"错误:没有指定后缀名!")
    If Response=vbCancel Then
      GameOver
    End If
  End If
Loop While Extension="" and Response=vbRetry
Extension=":" & Extension

'-----在执行操作之前的最后一次确认
Response=MsgBox ("将列出:" & Replace(Extension,":"," .",vbTextCompare) & " 文件。" & vbCrLf & vbCrLf & Space(8) & "是 ===> 继续" & vbCrLf & Space(8) & "否 ===> 重新输入" & vbCrLf & Space(6) & "取消 ===> 退出程序",3 Or 32,"准备好了吗")
If Response=2 Then    'vbCacel不继续就停止
  GameOver
End If
Loop While Response=7   'vbRetry则返回重新输入,vbYes(=1)则跳出循环,继续下面。


'-----开始计时
Begin=Time

'-----递归搜索文件并列出相关信息
If InStr(1,Extension,"*",vbTextCompare)>1 Then
  RecurSearchAll fso.GetFolder(CurrentPath)
Else
  RecurSearch fso.GetFolder(CurrentPath)
End If

'-----计算并显示费时
Over=Time
MsgBox "用时:" & TimeSpend(Begin,Over) & vbCrLf & "结果将保存在当前目录下FileList.TxT中。", 64


'-----形成FileList.TXT文件然后打开
SaveResult (Result)

'-----结束
GameOver

'*************主程序结束***************
'
'+++++++++++++过程与函数+++++++++++++++
'
'-----过程:递归搜索子目录并对指定后缀名文件列表
'//先判断文件夹内是否有文件,有则调用List,再判断是否有文件夹,有则调用自身,由此实现递归搜索。
Sub RecurSearch (objFolder)
  Dim SubFolder
  If objFolder.Files.Count>0 Then
    List (objFolder)
  End If
  If objFolder.SubFolders.Count>0 Then
    For Each SubFolder in objFolder.SubFolders
      RecurSearch SubFolder      '调用自身,递归循环
    Next
  End If
End Sub

'-----过程:递归搜索子目录并对所有文件列表
'//先判断文件夹内是否有文件,有则调用ListAll,再判断是否有文件夹,有则调用自身,由此实现递归搜索。
Sub RecurSearchAll (objFolder)
  Dim File, FileSize, Attribute, DateTimeLastModified, SubFolder
  If objFolder.Files.Count>0 Then
    For Each File in objFolder.Files
      FileSize=";" & MaskNumber(File.Size) & Space(3)
      Attribute=CheckAttribs(File.Attributes)
      DateTimeLastModified=Mask(DateValue(File.DateLastModified),"-") & " " & Mask(TimeValue(File.DateLastModified),":")
      Result=Result & FileSize & DateTimeLastModified & Space(3) & Attribute & fso.GetAbsolutePathName(File) & vbCrLf
    Next
  End If
  If objFolder.SubFolders.Count>0 Then
    For Each SubFolder in objFolder.SubFolders
      RecurSearchAll SubFolder
    Next
  End If
End Sub

'-----函数:对目录内文件列表
'//接受一个文件夹对象,对里面符合筛选条件的文件进行详细列表,结果将累积存放在全局变量'Result'里。
Sub List (objFolder)
  Dim File, FileSize, Attribute, DateTimeLastModified
  For Each File in objFolder.Files
    If InStr(1,Extension,fso.GetExtensionName(File),vbTextCompare)>1 Then   '过滤出指定类型的文件再列表
      FileSize=";" & MaskNumber(File.Size) & Space(3)
      Attribute=CheckAttribs(File.Attributes)
      DateTimeLastModified=Mask(DateValue(File.DateLastModified),"-") & " " & Mask(TimeValue(File.DateLastModified),":")
      Result=Result & FileSize & DateTimeLastModified & Space(3) & Attribute & fso.GetAbsolutePathName(File) & vbCrLf
    End If
  Next
End Sub


'-----函数:格式化字节数
'//接受一串数字,从个位起每三位用","分组,串前面填空格直到整串长度为13。
Function MaskNumber(Bytes)
  MaskNumber=FormatNumber(Bytes,0,-1,0,-1)
  Do Until Len(MaskNumber)>13
    MaskNumber=" " & MaskNumber
  Loop
End Function


'-----过程:格式化日期和时间
'//接受短日期或长时间类型变量,接受一个指定的分隔符,将日期时间格式化成:'YY-MM-DD hh:mm:ss' 形式。
Function Mask(DateTime,Delimiter)
  Dim Element
    For Each Element in Split(DateTime,Delimiter)
      If Len(Element)<2 Then
        Do Until Len(Element)=2
          Element="0" & Element
        Loop
      Else
        Element=Right(Element,2)
      End If
      Mask=Mask & Delimiter & Element
    Next
  Mask=Mid(Mask,2)
End Function


'-----函数:检出文件属性
'//接受字节型的文件属性,内部以数组形式定义了各字节的含义,循环地用and逻辑去试。后面填空格使结果的串长度为7。
Function CheckAttribs(Attribute)
  Dim Description, x, Attribs
  Description=Split("R;H;S;Drv;Fld;A;Lnk;128;256;512;1024;Cprs;4096;8192",";")
  For x=0 to 13
    If (Attribute and 2^x) Then
      Attribs=Attribs & UCase(Description(x))
    End If
  Next
  Do While Len(Attribs)<7
    Attribs=Attribs & " "
  Loop
  CheckAttribs=Attribs
End Function


'-----过程:排序
'Sub Sort(Text)

'
'
'End Sub


'-----过程:将列表结果存盘并打开
'//接受全局变量Result中的结果,存为FileList.TxT文件,并打开查看。
Sub SaveResult (Result)
  Dim filelist, openFileList
  Set filelist=fso.CreateTextFile(CurrentPath & "FileList.TxT",True)
  filelist.Write(Result)
  filelist.Close
  Set openFileList=CreateObject("WScript.Shell")
  OpenFileList.Run "FileList.TxT"
  Set openFileList=Nothing
End Sub


'-----函数:计算时间间隔
'//用结束时间Over减起始时间Begin,换算成hh:mm:ss形式,并返回字串到函数值。
Function TimeSpend(Begin,Over)
Dim Start, i, HowLong
Start=Split(Begin,":")
HowLong=Split(Over,":")
For i=0 to 2
  HowLong(i)=HowLong(i)-Start(i)
  If HowLong(i)<0 Then
    HowLong(i)=HowLong(i)+60
    HowLong(i-1)=HowLong(i-1)-1
  End If
'  TimeSpend=TimeSpend & ":" & HowLong(i)
Next
'  TimeSpend=Mid(TimeSpend,2) & Space(6)
''  TimeSpend=HowLong(1) & "′" & HowLong(2) & "″" & Space(9)
  TimeSpend=HowLong(1) & "′" & HowLong(2) & "″" & Space(9)
  TimeSpend=HowLong(1) & "分" & HowLong(2) & "秒" & Space(9)
End Function

'-----过程:结束时善后处理
Sub GameOver
  Set fso=Nothing
  WScript.Quit
End Sub
'+++++++++++过程与函数结束+++++++++++++

你可能感兴趣的:(职场,VBScript,休闲)