2009-12-29 6 views
5

Sto cercando un VBScript che esegue una ricerca e sostituisce i file (ad esempio 1.txt 2.xml). Ho il file "1.txt" che dentro c'è la parola "temporaneo" e voglio cambiarlo in "permanente". Perché ottengo molto questo file ho bisogno di uno script per questo.Trova e sostituisci la stringa nel mio testo con VBScript

Ogni volta che provo a scrivere uno script che contiene un file txt aperto e il comando sostituisce, non lo fa.

Ho trovato uno script che modifica questo file con un altro file e esegue la modifica all'interno, ma non è quello che sto cercando.

+0

E 'consuetudine per ringraziare l'utente che fornisce la risposta corretta , contrassegnando la loro risposta come risposta accettata. – Tester101

+0

Ho testato lo script utilizzando un file con estensione .config contenente il testo di esempio fornito nel commento e non ho avuto problemi. Non sono sicuro di come stai usando lo script, ma nel caso di "" quando scrivi il comando dalla riga di comando non includi il "" digita semplicemente Find_And_Replace.vbs "C: \ 1.txt" "temporaneo" "permanente". NOT Find_And_Replace.vbs "C: \ 1.txt" "" temporary "" "permanente". – Tester101

+0

Puoi anche provare a cambiare la prima riga nella funzione FindAndReplace "Imposta inputFile = CreateObject (" Scripting.FileSystemObject "). OpenTextFile (strFilename, 1)" Con questo "Imposta inputFile = CreateObject (" Scripting.FileSystemObject "). OpenTextFile (strFilename, 1, true, 0) ". Se questo non funziona prova a cambiare questa riga "outputFile.Write Replace (strInputFile, strFind, strReplace)" Con questo "outputFile.Write Replace (strInputFile, strFind, strReplace, 1, -1,1)" – Tester101

risposta

5

Prova questa

If WScript.Arguments.Count <> 3 then 
    WScript.Echo "usage: Find_And_replace.vbs filename word_to_find replace_with " 
    WScript.Quit 
end If 

FindAndReplace WScript.Arguments.Item(0), WScript.Arguments.Item(1), WScript.Arguments.Item(2) 
WScript.Echo "Operation Complete" 

function FindAndReplace(strFilename, strFind, strReplace) 
    Set inputFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strFilename, 1) 
    strInputFile = inputFile.ReadAll 
    inputFile.Close 
    Set inputFile = Nothing 
    Set outputFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(strFilename,2,true) 
    outputFile.Write Replace(strInputFile, strFind, strReplace) 
    outputFile.Close 
    Set outputFile = Nothing 
end function 

Salva questo in un file chiamato Find_And_Replace.vbs, può quindi essere utilizzato dalla riga di comando come questo.

[C:\]> Find_And_Replace.vbs "C:\1.txt" "temporary" "permanent" 

* Questo metodo è case sensitive "Questo"! = "Questo"

Se non si desidera leggere l'intero file in memoria, è possibile utilizzare un file temporaneo come questo.

If WScript.Arguments.Count <> 3 then 
    WScript.Echo "usage: Find_And_replace.vbs filename word_to_find replace_with " 
    WScript.Quit 
end If 

FindAndReplace WScript.Arguments.Item(0), WScript.Arguments.Item(1), WScript.Arguments.Item(2) 
WScript.Echo "Operation Complete" 

function FindAndReplace(strFile, strFind, strReplace) 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set objInputFile = objFSO.OpenTextFile(strFile,1) 
    strTempDir = objFSO.GetSpecialFolder(2) 
    Set objTempFile = objFSO.OpenTextFile(strTempDir & "\temp.txt",2,true) 
    do until objInputFile.AtEndOfStream 
     objTempFile.WriteLine(Replace(objInputFile.ReadLine, strFind, strReplace)) 
    loop 
    objInputFile.Close 
    Set objInputFile = Nothing 
    objTempFile.Close 
    Set objTempFile = Nothing 
    objFSO.DeleteFile strFile, true 
    objFSO.MoveFile strTempDir & "\temp.txt", strFile 
    Set objFSO = Nothing 
end function 
+0

Grazie mille è molto bello e creativo, questo è quello che stavo cercando. Felice anno nuovo. – Tzahi

+0

Ciao, Ho qualche problema con lo script, i file con cui ho un problema includono "", nel file prima della parola che provo a sostituire (cioè "questo numero di volo è" temporaneo "". file che termina .config Non ho alcun errore (operazione completata) come con successo, quindi è molto difficile sapere qual è il problema Qualche idea sul perché o come risolverlo? Saluti – Tzahi

+0

non funzionerà con Unicode I guess – stijn

1

Si può provare questa versione che non slurp l'intero file in memoria:

Set objFS = CreateObject("Scripting.FileSystemObject") 
strFile=WScript.Arguments.Item(0) 
strOld=WScript.Arguments.Item(1) 
strNew=WScript.Arguments.Item(2) 
Set objFile = objFS.OpenTextFile(strFile) 
Do Until objFile.AtEndOfStream 
strLine = objFile.ReadLine 
     if Instr(strLine,strOld)> 0 Then 
      strLine=Replace(strLine,strOld,strNew) 
     End If 
WScript.Echo strLine 
Loop 

Usage:

c:\test> cscript //nologo find_replace.vbs file oldtext newtext 
+0

Questo non cambia il file. Il motivo per cui "slurp" l'intero file in memoria, è che posso scrivere le modifiche sullo stesso file. – Tester101