VB GUI интерфейс для запуска VBS Script - PullRequest
3 голосов
/ 18 февраля 2010

У меня есть сценарий VBS, который мне нужно запускать ежемесячно, который собирает информацию о файле, например, имя файла, тип, дату изменения и т. Д. Когда я обрабатываю каждый файл, он сохраняет все это в файл CSV, чтобы я мог обработать его в Excel.

Для запуска скрипта я устанавливаю командный файл .bat

Проблема в том, что мне нужен некоторый интерфейс с графическим интерфейсом, чтобы при запуске пакетного или 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

И беги.бат

cscript.exe C:\script\test.vbs

Как видите, test.vbs указывает, какой раздел сканировать и захватывать. код: strFolder = "C:\"

Что бы вы порекомендовали, люди, работающие с этим, гораздо менее опытны, чем я, с VB, поэтому им потребуется какой-то графический интерфейс, который будет запрашивать ввод буквы диска, а затем изменять код строки strFolder = "C:\" какую бы букву диска они не вводили, а затем запускаем test.vbs.

Любая помощь приветствуется.

:) Ура

Ответы [ 5 ]

3 голосов
/ 18 февраля 2010

Было бы проще всего добавить букву диска в качестве параметра вашего vbscript.

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

Тогда вы можете просто запустить сценарий, как если бы вы добавляли букву диска.

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

Затем вы можете обернуть скрипт в графический интерфейс VB (поле ввода, как предлагалось ранее), если оно действительно нужно пользователям. Или, что еще лучше, ваш скрипт может просто попросить их ввести букву диска.

Примечание (в зависимости от того, какую версию окон вы используете и как вам нужны даты), команда dir напечатает определенную дату файла с помощью ключа / t. Так что dir /ta будет печатать дату последнего доступа. К сожалению, это только один (доступ, изменение, создание) за один раз. Вы можете использовать это и передать его в файл (dir /ta > Output.txt) вместо написания отдельного скрипта.

2 голосов
/ 16 февраля 2012

Использовать приложение HTA. Это лучший графический интерфейс для VBScript и JScript http://technet.microsoft.com/en-us/library/ee692768.aspx

2 голосов
/ 18 февраля 2010

InputBox - самое простое решение, хотя вам, вероятно, придется выполнить некоторую проверку ошибок.

Также есть BrowseForFolder, который позволяет пользователям выбирать папку.Опять же, вам, вероятно, придется выполнить некоторую проверку ошибок, если вы хотите ограничить пользователей только корневой папкой диска.

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

2 голосов
/ 18 февраля 2010

почему не пользуетесь 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
2 голосов
/ 18 февраля 2010

Вы можете использовать InputBox

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...