2009-12-29 113 views
5

Estoy buscando un archivo VBScript que realice una búsqueda y lo reemplace en archivos (por ejemplo, 1.txt 2.xml). Tengo el archivo "1.txt" que contiene la palabra "temporal" y quiero cambiarlo a "permanente". Como obtengo este archivo mucho, necesito un script para ello.Buscar y reemplazar cadenas en mi texto con VBScript

Cada vez que intento escribir un script que contiene abrir un archivo txt y reemplazar el comando, no lo hace.

Encontré una secuencia de comandos que cambia este archivo con otro archivo y hace el cambio dentro, pero esto no es lo que estoy buscando.

+0

Es costumbre agradecer al usuario que proporciona la respuesta correcta , marcando su respuesta como la respuesta aceptada. – Tester101

+0

He probado el script usando un archivo con la extensión .config que contiene el texto de ejemplo que proporcionó en su comentario, y no tuve ningún problema. No estoy seguro de cómo está usando el script, pero en el caso de "" cuando escribe el comando en la línea de comando, no incluya el "" simplemente escriba Find_And_Replace.vbs "C: \ 1.txt" "temporary" "permanente". NO Find_And_Replace.vbs "C: \ 1.txt" "" temporal "" "permanente". – Tester101

+0

También puede intentar cambiar la primera línea en la función FindAndReplace "Establecer inputFile = CreateObject (" Scripting.FileSystemObject "). OpenTextFile (strFilename, 1)" Con esto "Establecer inputFile = CreateObject (" Scripting.FileSystemObject "). OpenTextFile (strFilename, 1, verdadero, 0) ". Si eso no funciona intente cambiar esta línea "outputFile.Write Replace (strInputFile, strFind, strReplace)" Con este "outputFile.Write Replace (strInputFile, strFind, strReplace, 1, -1,1)" – Tester101

Respuesta

5

probar este

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 

Guardar esto en un archivo llamado Find_And_Replace.vbs, que luego se puede utilizar en la línea de comando como este.

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

* Este método es sensible a mayúsculas "Este"! = "Este"

Si no desea leer el archivo en la memoria, se puede utilizar un archivo temporal como este.

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

Muchas gracias es muy hermoso y creativo, esto es lo que estaba buscando. Feliz año nuevo. – Tzahi

+0

Hola, A veces tengo problemas con el script, los archivos con los que tengo un problema incluyen "", en el archivo antes de la palabra que trato de reemplazar (es decir, "este número de vuelo es" temporal "" y también archivos que terminaron .config No recibo ningún error (Operación completa) como con éxito, por lo que es muy difícil saber cuál es el problema ¿Alguna idea de por qué o cómo solucionarlo? Saludos – Tzahi

+0

no funcionará para Unicode I Supongo – stijn

1

Puede probar esta versión que no sorber todo el archivo en la 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 

Uso:

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

Esto no cambia el archivo. La razón por la que "sorbo" todo el archivo en la memoria, es para que pueda escribir los cambios en el mismo archivo. – Tester101

Cuestiones relacionadas