Постоянная переменная переопределена? - PullRequest
0 голосов
/ 30 декабря 2018

Я использую VBScript, чтобы выбрать определенные части файла .txt на основе шаблона, а затем выводить его в другой файл .txt.VBScript запускается из пакетного файла (.BAT), и часть, в которой VBScript создает файл .txt с именем «progress.txt», предназначена для того, чтобы пакетный файл мог знать, когда закончился VBScript, и мог продолжить.

Я продолжаю получать сообщение о том, что переменная ForWriting в строке 13 уже определена, но я не вижу нигде в коде, где она была ранее определена.Я попытался полностью исключить переменную ForWriting и просто поставить 2 после части "hourextracted.txt", но сценарий по какой-то странной причине крайне нестабилен.

Другая странная вещьв том, что скрипт на самом деле работает.Работает нормально.Я продолжаю получать сообщение об ошибке, но скрипт все еще выполняет свою работу, и он делает это хорошо.Все, что я хочу, чтобы сообщение об ошибке исчезло.У меня есть пара других сценариев, которые в основном идентичны этому, которые используются в командном файле, которые прекрасно работают без получения сообщения об ошибке, даже если код тот же.Только этот, однако, получает сообщение об ошибке.

Вот код:

Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("hour.txt", ForReading)
strSearchString = objFile.ReadAll
objFile.Close
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.Pattern = "\d{2}"
Set colMatches = objRegEx.Execute(strSearchString)  
If colMatches.Count > 0 Then
    For Each strMatch in colMatches
        Set obj = CreateObject("Scripting.FileSystemObject")
        Const ForWriting = 2
        Set obj1 = obj.OpenTextFile("hourextracted.txt", ForWriting)
        obj1.WriteLine(strMatch.Value)
        obj1.Close
        Set obj = Nothing 
        outFile = "proceed.txt"
        Set objFile = objFSO.CreateTextFile(outFile,True)
        objFile.Write "null" & vbCrLf
        objFile.Close
    Next
End If

1 Ответ

0 голосов
/ 30 декабря 2018

В VBScript константы заменяются в коде во время компиляции, но объявление не происходит до тех пор, пока не будет достигнут оператор Const (см. здесь ).

Если вы разместитеConst объявление внутри цикла For, механизм VBScript будет пытаться объявить константу на каждой итерации.

Итак, решение состоит в том, чтобы просто поместить объявление константы из цикла For.

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