2

从那开始,我对 VBS 不是很好,但正在努力学习。现在我在将替换写入文本文件时遇到了一些困难。

我想要做的是搜索文本“VGML”,当找到它时检查同一行是否有“STML”,如果有,这应该替换为“”,以免弄乱文件中的位置。最后,如果发现没有“STML”的“VGML”,则应删除“VGML”。

到目前为止,我在使用 echo 时可以看到代码执行了我想要的操作,但是写入文件主要是让我得到一个空文件,其中代码删除了所有内容。

谁能把我引向正确的方向?

这是代码:

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Script\RemoveSTML\testFiles\test.txt", ForReading)

strEMTY = "    "
strSTML = "STML"
strVGML = "VGML"

Do Until objFile.AtEndOfStream
   strLine = objFile.ReadLine
   If InStr(strLine,strVGML)>0 Then
      If Instr(strLine,strSTML)>0 Then
         strLine = Replace(strLine, strSTML, strEMTY)
         wscript.Echo strLine
      Else
         strLine = Replace(strLine, strVGML, strEMTY)
         wscript.Echo strLine
      End If
   End If                                             
Loop
objFile.Close
Set objFile = objFSO.OpenTextFile("C:\Script\RemoveSTML\testFiles\test.txt", ForWriting)
objFile.Write strLine
objFile.Close
Wscript.Echo "done"

谢谢你的帮助!为了给我一个正确的方向!

4

1 回答 1

1

在循环中,您读取文件的每一行并将其写入变量strLine.
之后,您替换“SMTL”/“VGML”,但在那之后,您对 的内容什么也不做strLine- 您只需在下一个循环中用源文件中的下一行替换它。

仅在最后,您写入strLine文件一次 - 但在那一刻,strLine仅包含源文件的最后一行。

解决方案:您可以写入内部的目标文件Do...Loop(但我不熟悉 VBScript,所以我不知道是否/如何执行此操作),或者您可以使用第二个字符串变量在strLine循环内追加但更换后......像这样:

strFinal = strFinal & strLine

最后,您写入strFinal文件,而不是strLine.

于 2012-07-22T16:41:21.580 回答