Почему этот VBScript выдает ошибку при попытке создать файл? - PullRequest
0 голосов
/ 23 марта 2011

Я нашел этот скрипт и, похоже, не могу понять, почему он выдает ошибку при попытке создать файл C:\IPSecWeights.xls.

Строка, с которой у меня возникли проблемы:

Set objWorkbook = objExcel.Workbooks.Open(FileLoc)

Я получаю ошибку, что файл не найден.Как я могу переписать свой код, чтобы это исправить?

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Dim objFSO,objFile
Dim arrLines
Dim strLine
Dim objExcel,objWorkbook
Dim FileLoc
Dim intRow
Dim objDictionary

FileLoc = "C:\IPSecWeights.xls"

Sub ExcelHeaders()
    Set objRange = objExcel.Range("A1","G1")
    objRange.Font.Size = 12
    objRange.Interior.ColorIndex=15

    objexcel.cells(1,1)="Filter Name"
    objexcel.cells(1,2)="Source"
    objexcel.cells(1,3)="Destination"
    objexcel.cells(1,4)="Source Port"
    objexcel.cells(1,5)="Destination Port"
    objexcel.cells(1,6)="Protocol"
    objexcel.cells(1,7)="Direction"
End Sub

Function RegExFind(strText,strPattern)
    Dim regEx
    Dim match, Matches
    Dim arrMatches
    Dim i : i = 0
    Set regEx = New RegExp
    regEx.IgnoreCase = True
    regEx.Global = True
    regEx.Pattern = strPattern

    Set matches = regEx.Execute(strText)
    ReDim arrMatches(Matches.Count)
    For Each match In Matches
        For Each SubMatch In match.Submatches
            arrMatches(i) = Submatch
            i = i + 1
        Next
    Next
    RegExFind = arrMatches
End Function


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(WScript.Arguments(0),ForReading)

Set objExcel = CreateObject("excel.application")
Set objWorkbook = objExcel.Workbooks.Open(FileLoc)

objExcel.Visible = True

ExcelHeaders ' Create Excel Headers

rePolicy = "Policy Name\s+:\s(.+)"
reSRCAddr = "Source Address\s+:\s(.+)"
reDSTAddr = "Destination Address\s+:\s(.+)"
reProtocol = "Protocol\s+:\s(.+)"
reSRCPort = "Source Port\s+:\s(.+)"
reDSTPort = "Destination Port\s+:\s(.+)"
reDirection = "Direction\s+:\s(.+)"

strText = objFile.ReadAll
objFile.Close

Dim arrPolicy, arrSRCAddr, arrDSTAddr, arrProtocol, arrSRCPort, arrDSTPort, arrDirection

arrPolicy = RegExFind(strText, rePolicy)
arrSRCAddr = RegExFind(strText, reSRCAddr)
arrDSTAddr = RegExFind(strText, reDSTAddr)
arrProtocol = RegExFind(strText, reProtocol)
arrSRCPort = RegExFind(strText, reSRCPort)
arrDSTPort = RegExFind(strText, reDSTPort)
arrDirection = RegExFind(strText, reDirection)

intRow = 2

For i = 0 To UBound(arrPolicy)
    objExcel.Cells(introw,1) = arrPolicy(i)
    objExcel.Cells(introw,2) = arrSRCAddr(i)
    objExcel.Cells(introw,3) = arrDSTAddr(i)
    objExcel.Cells(introw,4) = arrSRCPort(i)
    objExcel.Cells(introw,5) = arrDSTPort(i)
    objExcel.Cells(introw,6) = arrProtocol(i)
    objExcel.Cells(introw,7) = arrDirection(i)

    intRow = intRow + 1
Next

objFile.Close
objWorkbook.save
'objExcel.Quit

1 Ответ

3 голосов
/ 23 марта 2011

Я подозреваю, что «Файл не найден» это сообщение несколько вводит в заблуждении ошибки. То есть, ваша фактическая Проблема заключается разрешение файловой системы, но VBScript упорно сообщает об этом как«Файл не найден» вместо более заметной ошибки.

Предположительно, скрипт работал нормально в более ранних версиях Windows, но вы сейчас пробуете его на компьютере с установленной Vista или более поздней версией, которая представляет кучудополнительные функции безопасности и защита от записи. Контроль учетных записей пользователей (UAC) не позволит приложениям или сценариям записывать данные на корневой уровень вашего жесткого диска.

Конечно, это не должно быть проблемой, поскольку у легальных приложений нетнеобходимо вмешиваться в файлы на корневом уровне жесткого диска или в общих системных папках (например, C:\Windows), но иногда возникает во время тестирования.

Измените путь к файлу в сценарии на то, что выгарантированно иметь доступ для чтения / записи, как ваша папка «Мои документы».Для развертывания вам все равно не следует жестко задавать путь к файловой системе.Вместо этого используйте GetSpecialFolder функцию из FileSystemObject для получения пути.

...