用于运行VBS Script的VB GUI界面

时间:2010-02-18 14:18:48

标签: user-interface vbscript batch-file

我有一个VBS脚本,我需要每月运行一次,它捕获文件信息,如文件名,类型,修改日期等等。当我处理每个文件时,它将所有文件保存到CSV文件中,以便我可以在Excel上处理它。

要运行脚本,我设置了一个批处理文件.bat

问题是我需要某种GUI界面,这样当批处理或vbs文件运行时,它会要求用户输入要扫描的驱动器号。

这是我的代码:

test.vbs:
Option Explicit
Dim objFS, objFld
Dim objArgs
Dim strFolder, strDestFile, blnRecursiveSearch
Dim strLines()
Dim i
Dim strCsv

    i = 0

'   'Get the commandline parameters
'   Set objArgs = WScript.Arguments 
'   strFolder = objArgs(0)
'   strDestFile = objArgs(1)
'   blnRecursiveSearch = objArgs(2)

    '###################################
    'MAKE SURE THESE VALUES ARE CORRECT
    '###################################
    strFolder = "C:\" 
    strDestFile = "C:\test\Output.csv" 
    blnRecursiveSearch = True

    'Create the FileSystemObject
    Set objFS=CreateObject("Scripting.FileSystemObject")
    'Get the directory you are working in 
    Set objFld = objFS.GetFolder(strFolder)

    'Now get the file details
    GetFileDetails objFld, blnRecursiveSearch 

    'Write the csv file
    Set strCsv = objFS.CreateTextFile(strDestFile, True)
    strCsv.Write Join(strLines, vbCrLf)

    'Close and cleanup objects
    strCsv.Close
    Set strCsv = Nothing
    Set objFld = Nothing
    Set strFolder = Nothing
    Set objArgs = Nothing


Private Sub GetFileDetails(fold, blnRecursive)
Dim fld, fil
dim strLine(5)

    If blnRecursive Then
        'Work through all the folders and subfolders
        For Each fld In fold.SubFolders
            GetFileDetails fld, True 
        Next
    End If

    'Now work on the files
    For Each fil in fold.Files
        strLine(0) = fil.Path
        strLine(1) = fil.Type
        strLine(2) = fil.Size
        strLine(3) = fil.DateCreated
        strLine(4) = fil.DateLastModified
        strLine(5) = fil.DateLastAccessed

        Redim Preserve strLines(i)
        strLines(i) = Join(strLine, ",")
        i = i + 1
    Next
end sub

和run.bat

cscript.exe C:\script\test.vbs

如您所见,test.vbs指定要扫描和捕获的部分。代码:strFolder = "C:\"

什么是你最好的推荐,运行它的人对我的经验比我更少,所以他们需要某种GUI界面,要求输入驱动器号,然后修改行代码{{1}他们输入的任何驱动器号然后运行test.vbs。

感谢任何帮助。

:)干杯

5 个答案:

答案 0 :(得分:3)

最简单的方法是将驱动器号添加为vbscript的参数。

Set oArgs = WScript.Arguments
DriveLetter = oArgs(0)
strFolder = DriveLetter & ":\"

然后你可以像添加驱动器号一样运行脚本。

cscript.exe C:\script\test.vbs C

如果用户确实需要,您可以将脚本包装在VB GUI(如前所述的输入框)中。或者更好的是,你的脚本可以让他们输入驱动器号。

旁注(取决于您使用的Windows版本以及您需要日期的方式),dir命令将使用/ t开关打印特定的文件日期。因此dir /ta将打印上次访问的日期。不幸的是,它一次只进行一次(访问,修改,创建)。您可以使用它并将其传输到文件(dir /ta > Output.txt),而不是编写单独的脚本。

答案 1 :(得分:2)

答案 2 :(得分:2)

InputBox是最简单的解决方案,尽管您可能需要进行一些错误检查。

还有BrowseForFolder,它允许用户选择一个文件夹。同样,如果您想将用户限制在驱动器的根文件夹中,您可能需要进行一些错误检查。

http://msdn.microsoft.com/en-us/library/bb774065(VS.85).aspx

答案 3 :(得分:2)

为什么不使用vb​​.net?

对于您的驱动器号,您甚至可以使用下拉框。

Dim driveLetter as String = combobox.text

If (Directory.Exists(driveLetter)) Then
 strFolder = combobox.text
Else
 msgbox("Drive letter does not exist")
End If

答案 4 :(得分:2)

使用HTA应用程序。它是vbscript和jscript的最佳GUI http://technet.microsoft.com/en-us/library/ee692768.aspx