2009-05-20 5 views
2

Ich möchte dieses Skript zwei Werte in der gleichen Textdatei anstelle von einem ersetzen. Wenn ich Zeile 12 jedoch auskommentiere, bricht es das Skript ab. Muss ich daraus eine Schleife machen oder kann ich mehrere ersetzen?Vbscript Text ersetzen - einer funktioniert zwei bricht das Ganze

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

sollten Sie geklärt haben, dass Sie jeden Ersatz ausdrucken möchten, ansonsten sollte Frederiks Code für Sie funktionieren, wenn Sie beide gleichzeitig ersetzen und dann ausdrucken möchten. – Malachi

Antwort

6

Ich glaube, Sie wollen die zweite tun auf der von der ersten zurückgegebenen String ersetzen:

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

Andernfalls verlieren Sie die erste ersetzen, und nur die zweite in der erscheint Ergebnis.

0

Versuchen Sie folgendes:

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 

Durch es die Art und Weise tun Sie waren, wurden Sie das Original, nicht verwendete Text zweimal verwendet wird, überschreiben die erste ersetzen, wenn Sie die zweite tat.

+0

objFile.WriteLine strNewText sollte strText – AnthonyWJones

+0

Dank - Mangel an Kaffee Moment. : D – AnonJr

+0

Beide tun die gleiche Sache, ersetzen zuerst Arbeiten, Sekunde ist leer. – Travis

0

Ich bin sicher, dass meine if-Anweisung ist hässlich zu den wirklichen Programmierer gibt, aber hier ist, wie ich es bekam

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

Naja .. Das ist einfach .. Bueno ni tanto zu arbeiten .. Ich habe versucht, um dies einige Zeit zu tun. und ich fand die Antwort:

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 

Tanks, Gracias. José Villa Aus Culiacán, Sinaloa Mexiko