Почему этот VBScript выдает ошибку при попытке создать файл?
Я нашел этот скрипт и не могу понять, почему он выдает ошибку при попытке создать файл 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 ответ
Я подозреваю, что "Файл не найден" является ошибочным сообщением об ошибке. То есть, ваша актуальна проблема разрешения файловой системы, но VBScript упорно сообщает об этом как "Файл не найден" вместо более заметной ошибки.
Предположительно, сценарий отлично работал в более ранних версиях Windows, но теперь вы пробуете его на компьютере с установленной Vista или более поздней версией, которая предоставляет множество дополнительных функций безопасности и защиту от записи. Контроль учетных записей (UAC) не позволяет приложениям или сценариям записывать данные на корневой уровень вашего жесткого диска.
Конечно, это действительно не должно быть проблемой, поскольку законным приложениям не нужно вмешиваться в файлы на корневом уровне жесткого диска или в общих системных папках (например, C:\Windows
), но иногда всплывает во время тестирования.
Измените путь к файлу в скрипте на то, к которому вы гарантированно имеете доступ для чтения / записи, например на папку "Мои документы". Для развертывания вам все равно не следует жестко задавать путь к файловой системе. Использовать GetSpecialFolder
функция FileSystemObject
вместо этого, чтобы получить путь.