Usuário com melhor resposta
Bat - apagar uma linha em arquivo TXT

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
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
- Editado Fábio JrModerator terça-feira, 8 de novembro de 2011 19:40
- Sugerido como Resposta Fábio JrModerator quarta-feira, 9 de novembro de 2011 10:52
- Marcado como Resposta Gustavo R Valle quarta-feira, 9 de novembro de 2011 12:11
-
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
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
- Editado Fábio JrModerator terça-feira, 8 de novembro de 2011 19:40
- Sugerido como Resposta Fábio JrModerator quarta-feira, 9 de novembro de 2011 10:52
- Marcado como Resposta Gustavo R Valle quarta-feira, 9 de novembro de 2011 12:11
-
-
-
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- Editado Gustavo R Valle quarta-feira, 9 de novembro de 2011 11:01
-
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
-
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 -
-
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 -
-
Código publicado:
http://gallery.technet.microsoft.com/scriptcenter/Adicionar-entrada-no-72918271
Fábio de Paula Junior