Vbscript VBS替换和写入

Vbscript VBS替换和写入,vbscript,replace,readline,Vbscript,Replace,Readline,首先,我不太擅长VBS,但我正在努力学习。 现在我在将replace写入文本文件时遇到了一些困难 我要做的是搜索文本“VGML”,当发现该文本时,检查同一行是否有“STML”,如果有,则应将其替换为“”,以免弄乱文件中的位置。最后,如果发现“VGML”没有“STML”,则应删除“VGML” 在使用echo时,我已经看到代码实现了我想要的功能,但写入文件通常会得到一个空文件,其中代码删除了所有内容 有人能给我指出正确的方向吗 代码如下: Const ForReading = 1 Const For

首先,我不太擅长VBS,但我正在努力学习。 现在我在将replace写入文本文件时遇到了一些困难

我要做的是搜索文本“VGML”,当发现该文本时,检查同一行是否有“STML”,如果有,则应将其替换为“”,以免弄乱文件中的位置。最后,如果发现“VGML”没有“STML”,则应删除“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"

谢谢你的帮助!谢谢你朝正确的方向踢了我一脚

在循环中,读取文件的每一行,然后将其写入变量
strLine

在这之后,您将替换“SMTL”/“VGML”,但在这之后,您将对strLine的内容不做任何处理—您只需将其替换为下一个循环中源文件的下一行

只有在最后,您才向文件写入一次
strLine
,但在那一刻,
strLine
只包含源文件的最后一行

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

strFinal = strFinal & strLine

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

因为您才刚刚开始,这里有一个提示:始终使用
Dim
启动脚本,并养成显式声明变量的习惯。这几乎肯定会让你在未来免于麻烦。这让我朝着正确的方向走,至少不会停留在同一页上,现在还没有按照我的意愿工作。但希望很快我能让它像我想的那样运行。谢谢你的帮助!我想让你知道,你的投入帮助我现在解决了这个问题!我只需要添加
strFinal=strFinal&strLine&vbCr&vbLf
现在它运行得很好,花了我一个周末和一个晚上。再次感谢你的帮助!请把这个问题解决。对不起,我的错误-我写这篇文章时忘了换行。我不知道VBScript中是否也存在这种情况,但在VBA(我经常使用)中,您也可以使用
vbCrLf
而不是
vbCr&vbLf