我有一个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。
感谢任何帮助。
:)干杯
答案 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