vbscript заменить текст - один работает два ломает все это - PullRequest
2 голосов
/ 21 мая 2009

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

Sub ReplaceTxt()
'Writes values we got earlier to our unattend file       '
Const ForReading = 1
Const ForWriting = 2

   Set objFSO = CreateObject("Scripting.FileSystemObject")
   Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

   strText = objFile.ReadAll
   objFile.Close
   strNewText = Replace(strText, "***COMPNAME***", strCompname)
 '  strNewText = Replace(strText, "***Winkey***", strPoductkey)    '

   Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
   objFile.WriteLine strNewText
   objFile.Close
End Sub

Ответы [ 4 ]

6 голосов
/ 21 мая 2009

Я думаю, вы захотите выполнить вторую замену строки, возвращаемой первой:

strNewText = Replace(strText, "***COMPNAME***", strCompname)
strNewText = Replace(strNewText , "***Winkey***", strPoductkey)

В противном случае вы потеряете первую замену, а в результате появится только вторая.

0 голосов
/ 06 марта 2013

Ну .. Это просто .. Bueno ni tanto .. Я пытался сделать это некоторое время. и я нашел ответ:

Sub ReplaceTxt()
 'Writes values we got earlier to our unattend file       '
 Const ForReading = 1
 Const ForWriting = 2

 Set objFSO = CreateObject("Scripting.FileSystemObject")
 Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

 strText = objFile.ReadAll
 objFile.Close
 strNewText = Replace(strText, "***COMPNAME***", strCompname)
 strNewText2 = Replace(strNewText, "***Winkey***", strPoductkey)    '

 Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
 objFile.WriteLine strNewText2
 objFile.Close
End Sub

Танки, Грации. José Villa From Culiacán, Синалоа, Мексика

0 голосов
/ 21 мая 2009

Я уверен, что мое утверждение if уродливо для настоящих программистов, но вот как я заставил его работать

Sub ReplaceTxt() 'Writes values we got earlier to our unattend file' 
  Const ForReading = 1
  Const ForWriting = 2
  counter = 1

  For Each searchterm In Array("COMPNAME", "Winkey")
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

      strText = objFile.ReadAll
      objFile.Close

      If counter < 2 Then
         strText = Replace(strText, searchterm, strCompname)
      Else
         strText = Replace(strText, searchterm, strProductKey)
      End If

      Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
      objFile.WriteLine strText
      objFile.Close
      counter = counter + 1
  Next
End Sub
0 голосов
/ 21 мая 2009

Попробуйте это:

Sub ReplaceTxt() 'Writes values we got earlier to our unattend file' 
  Const ForReading = 1
  Const ForWriting = 2

  Set objFSO = CreateObject("Scripting.FileSystemObject")
  Set objFile = objFSO.OpenTextFile(strSIFpath, ForReading)

  strText = objFile.ReadAll
  objFile.Close

  strText = Replace(strText, "COMPNAME", strCompname)
  strText = Replace(strText, "Winkey", strPoductkey)

  Set objFile = objFSO.OpenTextFile("C:\$WIN_NT$.~BT\winnt.sif", ForWriting)
  objFile.WriteLine strText
  objFile.Close
End Sub 

Делая так, как вы делали, вы дважды использовали исходный, неиспользованный текст, перезаписывая первую замену, когда вы делали вторую.

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