2009-05-20 6 views
2

Je veux que ce script remplace deux valeurs dans le même fichier texte au lieu d'un seul. Cependant, si je décommente la ligne 12, cela casse le script. Dois-je en faire une boucle, ou puis-je faire plusieurs remplacements?vbscript remplacer le texte - on travaille deux interrompt le tout

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 
+0

Vous auriez dû préciser que vous voulez imprimer chaque remplacement, sinon le code de Frederik devrait fonctionner pour vous si vous voulez remplacer les deux en même temps et ensuite l'imprimer. – Malachi

Répondre

6

Je pense que vous voulez faire la deuxième remplacer sur la chaîne retournée par la première:

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

Sinon, vous perdrez le premier remplacer, et que le second apparaît dans la résultat.

0

Essayez ceci:

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 

En faisant la façon dont vous étiez, vous utilisiez l'original, le texte utilisé deux fois, en écrasant le premier quand vous avez fait remplacer le second.

+0

objFile.WriteLine strNewText devrait être strText – AnthonyWJones

+0

Merci - manque de moment de café. : D – AnonJr

+0

Les deux font la même chose, d'abord remplacer les travaux, la seconde est vide. – Travis

0

Je suis sûr que ma déclaration est si laide aux vrais codeurs là-bas, mais voici comment je l'ai eu à travailler

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

bien .. Cest facile .. Bueno ni tanto .. Je tentais pour faire cela un certain temps. et j'ai trouvé la réponse:

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 

Réservoirs, Gracias. José Villa De Culiacán, Sinaloa Mexique

Questions connexes