重新定义常量变量?
Constant Variable Re-defined?
我正在使用 VBScript 根据模式挑选出 .txt 文件的某些部分,然后将其输出到另一个 .txt 文件中。 VBScript 从批处理文件 (.BAT) 启动,VBScript 创建名为 'proceed.txt' 的 .txt 文件的部分是为了让批处理文件可以知道 VBScript 何时完成,并可以继续。
我不断收到错误消息,指出第 13 行的变量 ForWriting
已经定义,但我在代码中没有看到之前定义它的任何地方。我试图完全消除 ForWriting
变量,并在 "hourextracted.txt" 部分后面放一个 2,但由于某些奇怪的原因,脚本在这种情况下非常不稳定。
另一件奇怪的事情是脚本确实有效。它工作正常。我不断收到错误消息,但脚本仍然可以正常工作,而且效果很好。我只想让错误消息消失。我有几个其他脚本与批处理文件中使用的脚本基本相同,即使代码相同,它们也能正常工作而不会收到错误消息。但是,只有这一个会收到错误消息。
代码如下:
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
在 VBScript 中,常量在编译时在代码中被替换,但在到达 Const
语句之前不会发生声明(读取 here)。
如果将 Const
声明放在 For
循环中,VBScript 引擎将尝试在每次迭代时声明常量。
所以,解决方案就是将常量声明放在 For
循环之外。
我正在使用 VBScript 根据模式挑选出 .txt 文件的某些部分,然后将其输出到另一个 .txt 文件中。 VBScript 从批处理文件 (.BAT) 启动,VBScript 创建名为 'proceed.txt' 的 .txt 文件的部分是为了让批处理文件可以知道 VBScript 何时完成,并可以继续。
我不断收到错误消息,指出第 13 行的变量 ForWriting
已经定义,但我在代码中没有看到之前定义它的任何地方。我试图完全消除 ForWriting
变量,并在 "hourextracted.txt" 部分后面放一个 2,但由于某些奇怪的原因,脚本在这种情况下非常不稳定。
另一件奇怪的事情是脚本确实有效。它工作正常。我不断收到错误消息,但脚本仍然可以正常工作,而且效果很好。我只想让错误消息消失。我有几个其他脚本与批处理文件中使用的脚本基本相同,即使代码相同,它们也能正常工作而不会收到错误消息。但是,只有这一个会收到错误消息。
代码如下:
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
在 VBScript 中,常量在编译时在代码中被替换,但在到达 Const
语句之前不会发生声明(读取 here)。
如果将 Const
声明放在 For
循环中,VBScript 引擎将尝试在每次迭代时声明常量。
所以,解决方案就是将常量声明放在 For
循环之外。