none
Script para Procurar e alterar uma string

    Question

  • Boas,
    mais uma vez com intuito de automatizar algumas coisas quero saber se é possível com um script procurar por um excerto de texto dentro de uma pasta em ficheiros de texto. o Search do Windows tem uma opção que é "A Word or phrase in the file" se eu puser lá o que estiver à procura ele encontra.
    a Minha questão é se é possivel procurar por uma string nessa pasta (em ficheiro *.ini, ou outro tipo editável por texto) e substituir por uma input.
    Cláudio Gonçalves
    Wednesday, December 16, 2009 10:06 AM

Answers

  • Olá,

    Verifique o exemplo abaixo:


    'Pasta a Ser verificada
    strPasta = "c:\teste"

    'String Antiga
    strAntigo = "novo"

    'String Nova
    strNovo = "*** OK ***"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strPasta)
    Set colFiles = objFolder.Files
    For Each objFile in colFiles
        buscaArq objFile.path,strAntigo,strNovo
    Next
     

    Sub BuscaArq(strArquivo,strAntigo,strNovo)


     
    Dim fso, f
    Const ForReading = 1, ForWriting = 2
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(strArquivo) Then
       Set f = fso.OpenTextFile(strArquivo, ForReading, False)
       Dim lines
       lines = f.ReadAll
       f.Close
     
       lines = Replace(lines, strAntigo, strNovo)
     
       Set f = fso.OpenTextFile(strArquivo, ForWriting, True)
       f.Write(lines) 
       f.Close
    Else
       MsgBox fileName, vbOKOnly, "Arquivo não encontrado"
    End If

    End sub



    Altere as variaveis e faça os testes.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    Wednesday, December 16, 2009 12:29 PM
  • Cláudio,

              Tenho o seguinte código abaixo que faz essa alteração com a ajuda do seguinte programa INIFILE, que é especifico para alterar esse tipo de arquivo.
               Baixe o INIFILE no link http://home.mnet-online.de/horst.muc/wbat32.htm#inifile . Crie um arquivo bat com o código abaixo e coloque o executável junto com o arquivo bat.


    @echo off
    inifile Caminho do arquivo.ini [notes] IM_NO_SETUP=1


    Se tiver dúvida post.
    Espero ter ajudado.
    Leonardo Sousa
    Wednesday, December 16, 2009 4:21 PM
  • Cláudio,

          Em bat seriá dessa forma. Vejá se funciona e post o resultado.

    @echo off
    echo Digite o valor
    set /p  xxxx=
    inifile x:\app\bin01\ficheiro.ini [secção] something=AG%XXXX%01


    Espero ter ajudado.

    Leonardo Sousa
    Thursday, December 17, 2009 5:34 PM

All replies

  • Olá,

    Verifique o exemplo abaixo:


    'Pasta a Ser verificada
    strPasta = "c:\teste"

    'String Antiga
    strAntigo = "novo"

    'String Nova
    strNovo = "*** OK ***"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(strPasta)
    Set colFiles = objFolder.Files
    For Each objFile in colFiles
        buscaArq objFile.path,strAntigo,strNovo
    Next
     

    Sub BuscaArq(strArquivo,strAntigo,strNovo)


     
    Dim fso, f
    Const ForReading = 1, ForWriting = 2
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(strArquivo) Then
       Set f = fso.OpenTextFile(strArquivo, ForReading, False)
       Dim lines
       lines = f.ReadAll
       f.Close
     
       lines = Replace(lines, strAntigo, strNovo)
     
       Set f = fso.OpenTextFile(strArquivo, ForWriting, True)
       f.Write(lines) 
       f.Close
    Else
       MsgBox fileName, vbOKOnly, "Arquivo não encontrado"
    End If

    End sub



    Altere as variaveis e faça os testes.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    Wednesday, December 16, 2009 12:29 PM
  • Jesiel, muito obrigado mais uma vez pela resposta.
    alterei o caminho e os valores de:
    strAntigo = "novo";
    strNovo = "*** OK ***".

    Mas não mudou nada, o script corre, não retorna erro e no Task Manager quase que não dá pra ver o process.
    em cmd já coloquei o cscript antes do nome do arquivo para ver se havia retorno de alguma msg mas nada.
    Como havia dito os ficheiros que tenciono alterar têm a extensão *.ini, é relevante?
    Cláudio Gonçalves
    Wednesday, December 16, 2009 3:57 PM
  • Olá,

    Claudio, faça os testes criando a pasta c:\teste e copie os arquivos dentro da pasta c:\teste

    Depois altere as strings e faça os testes.


    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    Wednesday, December 16, 2009 4:16 PM
  • Cláudio,

              Tenho o seguinte código abaixo que faz essa alteração com a ajuda do seguinte programa INIFILE, que é especifico para alterar esse tipo de arquivo.
               Baixe o INIFILE no link http://home.mnet-online.de/horst.muc/wbat32.htm#inifile . Crie um arquivo bat com o código abaixo e coloque o executável junto com o arquivo bat.


    @echo off
    inifile Caminho do arquivo.ini [notes] IM_NO_SETUP=1


    Se tiver dúvida post.
    Espero ter ajudado.
    Leonardo Sousa
    Wednesday, December 16, 2009 4:21 PM
  • Leo baixei e vou alterar.
    Testarei as duas soluções da melhor forma pra mim.
    Tentarei se possível colocar em vbscript pois há-de haver necessidade de se introduzir dados.
    farei testes simples com .bat e direi algo.
    Cláudio Gonçalves
    Thursday, December 17, 2009 7:39 AM
  • Leo funcionou como precisava
    coloquei em um bat os caminhos dos ficheiros a alterar.
    mudei a secção e foi fácil.
    Mas isto fica em bat. o bom de procurar em vbscript é a interacção que é diferente. então se não for abusar muito tenho outro pedido relacionado.

    o meu caminho de alteração fica mais ou menos assim:
    x:\app\bin01\ficheiro.ini [secção] something=AGXXXX01

    há outras entradas em outros ficheiros mas o valor a ser alterado é somente o numero que está como XXXX (4 digitos), as pastas são incrementais (bin01,bin02 e aí por diante) bem como o valor após o XXXX(AGXXXX01, AGXXXX02,...)
    Como poderia criar em VBS de modo haver um inputbox que colocasse o valor XXXX guardasse e alterasse em todos os valores?
    Cláudio Gonçalves
    Thursday, December 17, 2009 8:27 AM
  • Cláudio,

          Em bat seriá dessa forma. Vejá se funciona e post o resultado.

    @echo off
    echo Digite o valor
    set /p  xxxx=
    inifile x:\app\bin01\ficheiro.ini [secção] something=AG%XXXX%01


    Espero ter ajudado.

    Leonardo Sousa
    Thursday, December 17, 2009 5:34 PM
  • boas Jesiel,
    testei como havia dito e notei que em subpastas ele não faz a procura.
    "nomedofile.vbs(29, 4) Erro em tempo de execução do Microsoft VBScript: O comando Input ultrapassou o final do ficheiro"
    Alguma ideia?

    Cláudio Gonçalves
    Friday, December 18, 2009 10:16 AM
  • Leo funcionou muito bem, já agora no site que me indicou tem outra ferramenta muito curiosa que é o Winput, já usou? testei mas os argumentos não estão bem explícitos, como ficaria neste caso?


    Cláudio Gonçalves
    Friday, December 18, 2009 10:19 AM
  • Cláudio,

         Acho que ficaria mais ou menos assim. Crie um bat com o comando abaixo.

    Winput "set xxxx=$input" "Digite o valor desejado" /upper > scritp.bat
    Leonardo Sousa
    Friday, December 18, 2009 10:47 AM
  • desculpa a minha ignorância, mas o valor "scritp.bat" é do Script que tenho estado a criar que altera juntamente com o inifile?
    é que tentei e o Wininput reescreve.
    Mas não é critico. farei como havias postado antes.
    Muito obrigado na mesma

    Cláudio Gonçalves
    Friday, December 18, 2009 10:58 AM