none
Bat - apagar uma linha em arquivo TXT RRS feed

  • Pergunta

  • Pessoal, estou com uma dúvida aqui.

    Vou usar um bat p/ acrescentar umas entradas no arquivo host. O script já está pronto e funcionando.

    Fiz um bat simples usando o echo mesmo. Desta forma:

    echo 10.10.11.11    teste.host.com >> c:\WINDOWS\system32\drivers\etc\hosts

    Só que, como ficaria p/ apagar esta linha do arquivo hosts?

     

    Esta é minha dúvida, qual sintaxe ou comando p/ apagar esta linha.

    Valeu!


    Gustavo Valle | http://grvalle.com
    terça-feira, 8 de novembro de 2011 18:12

Respostas

  • Poderia utilizar um findstr com a opção /V (exibe linhas que não contém a string), e redirecionando a saida para dentro de um arquivo temporário, em seguinda mova o temporário para o local do correto.

     

    .BAT

     

    @echo off
    set APAGAR="10.10.11.11    teste.host.com"
    
    find /i %APAGAR% %systemroot%\system32\drivers\etc\hosts
    if %ERRORLEVEL% EQU 0 (
    	findstr /i /v %APAGAR% %systemroot%\system32\drivers\etc\hosts > c:\temp\hosts
    	move /y c:\temp\hosts %systemroot%\system32\drivers\etc\ 
    
    )

     

     

    Fábio de Paula Junior






    terça-feira, 8 de novembro de 2011 19:18
    Moderador
  • Testei o script exatamente como postei e funcionou

    No Windows 7 precisei executar como Administrador senão dá acesso negado.

    Sobre só adicionar a informação se ela não existir, no próprio script que eu passei já tem a dica de como fazer, repare que eu faço um IF que verifica se a informação existe.

    O código abaixo só adiciona se a informação não existir

    .BAT

    SET NOVO=10.10.11.11    teste.host.com
    
    find /i "%NOVO%" %systemroot%\system32\drivers\etc\hosts
    if NOT %ERRORLEVEL% EQU 0 (
    	ECHO %NOVO% >>  %systemroot%\system32\drivers\etc\hosts
     )
    


    Fábio de Paula Junior
    • Sugerido como Resposta Fábio JrModerator quarta-feira, 9 de novembro de 2011 11:30
    • Marcado como Resposta Gustavo R Valle quarta-feira, 9 de novembro de 2011 12:02
    quarta-feira, 9 de novembro de 2011 11:26
    Moderador

Todas as Respostas

  • Poderia utilizar um findstr com a opção /V (exibe linhas que não contém a string), e redirecionando a saida para dentro de um arquivo temporário, em seguinda mova o temporário para o local do correto.

     

    .BAT

     

    @echo off
    set APAGAR="10.10.11.11    teste.host.com"
    
    find /i %APAGAR% %systemroot%\system32\drivers\etc\hosts
    if %ERRORLEVEL% EQU 0 (
    	findstr /i /v %APAGAR% %systemroot%\system32\drivers\etc\hosts > c:\temp\hosts
    	move /y c:\temp\hosts %systemroot%\system32\drivers\etc\ 
    
    )

     

     

    Fábio de Paula Junior






    terça-feira, 8 de novembro de 2011 19:18
    Moderador
  • Olá Fábio.

    Parece ser uma solução boa :)

    Só não preciso do resultado (mover pra outro arquivo). Tem como descartar a linha (string) ?

    Em todo caso já vou testar aqui.

     


    Gustavo Valle | http://grvalle.com
    quarta-feira, 9 de novembro de 2011 10:17
  • Eu não conheço uma maneira de descartar a linha, por isso eu primeiro gero um arquivo temporário sem a linha que quero eliminar e em seguida copio este temporário para o lugar do original.
    Fábio de Paula Junior
    quarta-feira, 9 de novembro de 2011 10:52
    Moderador
  • Fábio, fiz o teste com o bat que informou, porém, ele não apagou a linha.

    Minha necessidade é a seguinte:

    Preciso inserir algumas linhas no arquivo hosts.

    Do jeito acima (echo 10.10.11.11    teste.host.com >> c:\WINDOWS\system32\drivers\etc\hosts) ele adiciona, porém, se eu executar novamente, ele vai adicionando, não faz uma comparação do que tem antes de adicionar.

    Um script desta forma já resolveria o problema.


    Como não encontrei, pensei em 2 formas:

    - Deixar um script de inicialização inserindo as entradas no arquivo e um de desligamento, limpando tudo que foi adicionado (aplicado via GPO)

    - Usar este script p/ adicionar as entradas de forma manual, mas ter outro script p/ remover alguma linha em caso de alteração.



    Gustavo Valle | http://grvalle.com
    quarta-feira, 9 de novembro de 2011 10:59
  • Testei o script exatamente como postei e funcionou

    No Windows 7 precisei executar como Administrador senão dá acesso negado.

    Sobre só adicionar a informação se ela não existir, no próprio script que eu passei já tem a dica de como fazer, repare que eu faço um IF que verifica se a informação existe.

    O código abaixo só adiciona se a informação não existir

    .BAT

    SET NOVO=10.10.11.11    teste.host.com
    
    find /i "%NOVO%" %systemroot%\system32\drivers\etc\hosts
    if NOT %ERRORLEVEL% EQU 0 (
    	ECHO %NOVO% >>  %systemroot%\system32\drivers\etc\hosts
     )
    


    Fábio de Paula Junior
    • Sugerido como Resposta Fábio JrModerator quarta-feira, 9 de novembro de 2011 11:30
    • Marcado como Resposta Gustavo R Valle quarta-feira, 9 de novembro de 2011 12:02
    quarta-feira, 9 de novembro de 2011 11:26
    Moderador
  • Fábio, veja os prints:

    Conteúdo:

    Execução:

    Aqui ele não move - executando como ADM.

    Script:

    @echo off
    set APAGAR="10.__.__.15    bs__________b"

    find /i %APAGAR% %systemroot%\system32\drivers\etc\hosts
    if %ERRORLEVEL% EQU 0 (
        findstr /i /v %APAGAR% %systemroot%\system32\drivers\etc\hosts > c:\hosts
        move /y c:\hosts %systemroot%\system32\drivers\etc\

    )

    Detalhe: Só alterei o local onde será salvo o temporário (C:\).

     

    Vou testar o script que compara antes de gravar. Se der certo, matou ;)

     


    Gustavo Valle | http://grvalle.com
    quarta-feira, 9 de novembro de 2011 11:56
  • Fábio, show de bola!!

    Agora foi - comparando deu certo.

    Fiz o teste adicionando 2 entradas.

     

    Finalizando, se eu precisar apagar uma linha, só usar o primeiro script que mandou?


    Gustavo Valle | http://grvalle.com
    quarta-feira, 9 de novembro de 2011 12:02
  • Fábio agora ele limpou o arquivo!

    Show de bola.

    Mas tive que copiar a entrada conforme estava no arquivo Hosts.

    Acredito que seja em virtude da "tabulação", os espaços / tabs entre o IP e o host.

     

    Muito obrigado!

    Abraço.


    Gustavo Valle | http://grvalle.com
    quarta-feira, 9 de novembro de 2011 12:13
  • Provavelmente e isto mesmo, tabulações...
    Fábio de Paula Junior
    quarta-feira, 9 de novembro de 2011 12:15
    Moderador
  • quarta-feira, 9 de novembro de 2011 12:28
    Moderador