Início > Correção, Microsoft, Windows > BAT – Configurando IP, DNS e Gateway (Revisado)

BAT – Configurando IP, DNS e Gateway (Revisado)

sexta-feira, janeiro 4, 2013 - 8:15 Deixe um comentário Go to comments

Caros amigos e amigas

Como havia dito anteriormente, irei nesse post melhor organizar os outros dois posts sobre a configuração de IP’s através do DOS. (BAT – Configurando IP e DNS de forma manual – AnexoBAT – Configurando IP e DNS de forma manual e o Correção: bat – configurando IP e DNS de forma manual)

Além irei também colocar divididos pelo sistema operacional. (Windows XP, Windows Vista/7/2008/2008 R2 e Windows 8/2012.

Antes de iniciar irei passar as definições dos termos que serão utilizados para construção do script

netsh = network shell, ele permite que você administrar as configurações de IP, DNS, Gateway, DHCP e outras configurações de rede por linha de comando.

int = abreviatura de interface.

ip = Protocolo IP pode, em versões do Windows acima do XP deve-se dizer se é IPv4 ou IPv6. No XP somente a versão IPv6 deve ser declarada

set address = parâmetro utilizado para impor a configuração do endereçamento IP fixo.

name=”Conexão Local” = Nome da conexão de rede em português, os acentos irão gerar problemas na BAT por isso é necessário utilizar os caracteres do tópico Lista de acentos para o DOS.

name=Ehternet = no Windows 8/2012 que utilizei estavam ambos em ingles e o nome da conexão era ethernet (tomara que a MS tenha padronizado esse nome)

source=static = Tipo de endereçamento Fixo(static) ou dinâmico(DHCP)

192.168.0.22 255.255.255.0 192.168.0.1 1 = Endereço IP XXX.XXX.XXX.XXX, mascara de rede A.B.C.D, Gateway XXX.XXX.XXX.XXX e a métrica do gateway se deixado em branco ele receberá o valor de 1.

set dns = parâmetro utilizado para impor a configuração do endereçamento DNS fixo.

gwmetric = parâmetro utilizado para determinar a métrica (custo) do gateway.

  • Para o Windows XP a linha de configuração do IP, dois DNSs e dois Gateways será a seguinte:

Configuração IP

netsh int ip set address name=”Conexão Local” source=static 192.168.0.22 255.255.255.0 192.168.0.1 1

DNS

netsh int ip set dns “Conexão Local” static 200.204.0.10

netsh int ip add dns “Conexão Local” 200.204.0.15

Gateway secundário

netsh int ip add address =”Conexão local” gateway=10.10.0.254 gwmetric=2

  • Windows Vista/7/2008/2008 R2 a linha de configuração do IP, dois DNSs e dois Gateways será a seguinte:

Configuração IP

netsh interface ipv4 set address name=”Conexão Local” static 192.168.6.2 255.255.255.0 192.168.6.254 1

DNS

netsh interface ipv4 set dnsservers name=”Conexão Local” static 192.168.6.1

netsh interface ipv4 add dnsservers name=”Conexão Local” 8.8.8.8

Gateway

netsh interface ipv4 add address “Conexão local” gateway=10.10.0.254 gwmetric=5

  • Windows 8/2012

Configuração IP

netsh interface ipv4 set address name=”Ehternet” static 192.168.6.2 255.255.255.0 192.168.6.254 1

DNS

netsh interface ipv4 set dnsservers name=” Ehternet” static 192.168.6.1

netsh interface ipv4 add dnsservers name=” Ehternet” 8.8.8.8

Gateway

netsh interface ipv4 add address ” Ehternet” gateway=10.10.0.254 gwmetric=5

Dicas

  • Você deve salvar ele com a extensão .BAT ou .CMD para os que não estão familiarizados com isso na hora de salvar o nome do arquivo ficaria assim: nome_do_arquivo.bat ou nome_do_arquivo.cmd (o nome do arquivo pode conter espaços, mais recomendo a não utilizar dessa forma).
  • E também é altamente recomendado utilizar apenas um gateway por seguimento de rede, no lugar do seguindo gateway seria a utilização de rotas, que são adicionados com o comando route add, utilizando o parâmetro –P para que a rota se torne permanente.
  • Quando trabalhamos através de texto sempre devemos nos atentar com pontos básicos que são: acentos, espaços e os caracteres especiais, como por exemplo as apas que utilizamos na ferramenta de edição podem possuir codificação diferente na aplicação que irá interpretar a sequência de comandos.
  • Recomendo a utilização do notepad++ para a criação dos scripts.
  1. Rafael Tojal
    segunda-feira, outubro 14, 2013 - 10:22 às 10:22

    No caso aqui está com o nome correto, não foi este o problema, deixe seu micro com nome de teste, e altere no goto comp3, o nome para teste e execute… ele fica com o IP 101, executando o comp1 mesmo que o nome esteja errado

    • segunda-feira, outubro 14, 2013 - 13:51 às 13:51

      Fiz duas alterações no script que fizemos:
      1 – Acrescentei o /I que ignora o case sensitive;
      2 – Na última linha coloquei o nome de um computador que não existe, utilizando o comparativo NEQ (diferente) indo para o final do arquivo

      @echo on
      set nomecomputador=%computername%
      if /i %nomecomputador%==micro01 (goto comp1
      ) else if /i %nomecomputador%==micro02 (goto comp2
      ) else if /i %nomecomputador%==micro03 (goto comp3
      ) else if /i %nomecomputador% NEQ micro04 (goto fim
      )
      ...

      As imagens abaixo mostram o funcionamento do código.
      1 – Mostra o funcionamento normal da bat em relação a outros itens da lista

      2 – Mostra o comparativo NEQ em funcionamento

  2. Rafael Tojal
    quinta-feira, outubro 10, 2013 - 17:55 às 17:55

    set nomecomputador=%computername%
    if %nomecomputador%==Micro01 (goto comp1
    ) else if %nomecomputador%==Micro02 (goto comp2
    ) else if %nomecomputador%==Micro03 (goto comp3
    )
    :comp1
    netsh interface ipv4 set address name=”Local Area Connection” static 192.168.0.101 255.255.255.0 192.168.0.1 1
    goto fim
    :comp2
    netsh interface ipv4 set address name=”Local Area Connection” static 192.168.0.102 255.255.255.0 192.168.0.1 1
    goto fim
    :comp3
    netsh interface ipv4 set address name=”Local Area Connection” static 192.168.0.103 255.255.255.0 192.168.0.1 1
    goto fim

    • quinta-feira, outubro 10, 2013 - 23:32 às 23:32

      Rafael acabei de fazer um teste e descobri oque pode esta acontecendo de errado quando você executa no seu ambiente. Aqui eu alterei o nome da minha maquina de testes para MICRO02 e executei a bat com o nome micro02, como você pode notar a diferença entre maiúscula e minúscula é onde esta o problema.

  3. Rafael Tojal
    quinta-feira, outubro 10, 2013 - 16:14 às 16:14

    Então, o que ocorre… mesmo se o nome do micro estiver errado, ele executa somente o goto comp1… se eu por o nome correto no segundo else, ele nao faz… e consequentimente

    • quinta-feira, outubro 10, 2013 - 16:43 às 16:43

      Me envia o código da bat que você esta usando, porque de fato esta estranho, pois testei novamente aqui e não tive problemas.

  4. Rafael Tojal
    quinta-feira, outubro 10, 2013 - 15:26 às 15:26

    Resolvido, agora a dúvida, se o nome do micro for o do comp1 vai ok ! 100%… agora se for do comp2, não funcionou.. nem do comp3…. ele não alterou =/

  5. Rafael Tojal
    quinta-feira, outubro 10, 2013 - 15:18 às 15:18

    Thiago,

    Consegui 99,9% rs o que ocorre, o nome da conexão é Local Area Connection, e este caso ele não está aceitando… se eu altero para Ethernet por exemplo ele aceita… seria por causa do espaço ? como eu conseguiria resolver este problema ? Sem precisar mudar o nome da minha conexão rs

    • quinta-feira, outubro 10, 2013 - 15:54 às 15:54

      Quando temos o espaço é só usar as aspas duplas assim: “Local Area Connection”
      Agora o outro problema eu não sei te dizer o porque sem ver o erro, porque aqui depois que corrigimos todos os erros do script foi tudo certo.

  6. Rafael Tojal
    quinta-feira, outubro 10, 2013 - 13:53 às 13:53

    Thiago

    verifiquei que o que não funcionou foi o netsh, ele não trocou o IP… alterei para shutdown e acatou o comando… o que mais seria preciso para alterar o IP ?

    • quinta-feira, outubro 10, 2013 - 14:13 às 14:13

      Rafael, existem duas causas prováveis para o erro:
      1 – Codificação do acento o ã deve ser alterado para Æ, caso mais caracteres apresentem esse tipo de problema rescreva a linha de comando;
      2 – O comando NETSH deve ser executado como administrador para poder funcionar.

      Caso tenha ocorrido um erro diferente desse me diga qual foi para eu tentar te ajudar.

  7. Rafael Tojal
    quarta-feira, outubro 9, 2013 - 15:32 às 15:32

    Thiago,

    Eu preciso executar uma .bat para 56 micros, cujo os ips serão em ordem 192.168.0.101 até 192.168.0.156… existe como fazer um unico .bat, q se eu enviar para todos, ele consiga realizar a alteração? Tenho um software proprietário, que eu seto o IP atual, e consigo enviar uma .bat para todos… via PSTOOLS, minha dúvida é, consigo fazer com que cada um entenda qual sera seu IP ?

    Abrs

    • quarta-feira, outubro 9, 2013 - 20:23 às 20:23

      Olá Rafael! Muito obrigado por estar acessando o blog!

      É possível sim, utilizando o código abaixo, porém como você pode observar é necessário ter algo para dizer ao script qual computador você esta alterando o IP nesse caso eu utilizei o nome do computador. a do ELSE IF será repetida até o último computador assim como as linhas :compX, onde X é o número do computador.

      @echo off
      set nomecomputador=%computername%
      if %nomecomputador%==NOMEDOCOMPUTADOR (goto comp1)
      else if nomecomputador=NOMEDOCOMPUTADOR echo (goto comp2)
      else if nomecomputador=NOMEDOCOMPUTADOR echo (goto comp3)

      :comp1
      netsh interface ipv4 set address name=”Conexão Local” static 192.168.0.101 255.255.255.0 192.168.0.254 1
      goto fim
      :comp2
      netsh interface ipv4 set address name=”Conexão Local” static 192.168.0.102 255.255.255.0 192.168.0.254 1
      goto fim
      :comp3
      netsh interface ipv4 set address name=”Conexão Local” static 192.168.0.103 255.255.255.0 192.168.0.254 1
      goto fim

      :fim
      Exit

      • Rafael Tojal
        quinta-feira, outubro 10, 2013 - 10:42 às 10:42

        Tiago ! Muito obrigado já me deu uma luz, agora algumas dúvidas pontuais, vou te dar um exemplo pratico.
        Tenho os seguintes micros ;:
        Micro01
        Micro02
        Micro03
        E os ips que devem assumir, serão :
        192.168.0.101
        192.168.0.102
        192.168.0.103
        Respectivamente…

        Como ficaria neste caso ?

        @echo off
        set nomecomputador=%computername%
        if %nomecomputador%==Micro01 (goto comp1)
        else if nomecomputador=Micro02 echo (goto comp2)
        else if nomecomputador=Micro03 echo (goto comp3)
        :comp1
        netsh interface ipv4 set address name=”Conexão Local” static 192.168.0.101 255.255.255.0 192.168.0.254 1
        goto fim
        :comp2
        netsh interface ipv4 set address name=”Conexão Local” static 192.168.0.102 255.255.255.0 192.168.0.254 1
        goto fim
        :comp3
        netsh interface ipv4 set address name=”Conexão Local” static 192.168.0.103 255.255.255.0 192.168.0.254 1
        goto fim

        Seria assim ? não sou muito conhecedor de scripts, minha area é outra, no caso do IF, usamos a %, e no else if, não foi preciso, assim como o == e o =, quando utilizar qual ?

        Obrigado !

      • quinta-feira, outubro 10, 2013 - 11:55 às 11:55

        Rafael, desculpa mas eu escrevi errado a parte do Else if, ficaria dessa forma:

        @echo off
        set nomecomputador=%computername%
        if %nomecomputador%==Micro01 (goto comp1)
        else if %nomecomputador%==Micro02 echo (goto comp2)
        else if %nomecomputador%==Micro03 echo (goto comp3)

        Todo o resto esta correto

        Motivos:
        Quando usamos apenas um sinal de igual estamos dizendo para armazenar o valor que vem logo após ao sinal.
        Quando usamos dois sinais de igual estamos de fato fazendo a comparação de um valor com o outro
        Quando não usamos o % em uma variável o DOS não irá enxergá-lo como uma variável e sim como texto.

      • Rafael Tojal
        quinta-feira, outubro 10, 2013 - 12:06 às 12:06

        Thiago,

        Fiz o teste, e apresentou que Else não é reconhecido como um comando interno ou externo…

        O que será que houve ?

      • quinta-feira, outubro 10, 2013 - 13:59 às 13:59

        Rafel, corri oque estava de errado.

        set nomecomputador=%computername%
        if %nomecomputador%==NOMEDOCOMPUTADOR (goto comp1
        ) else if %nomecomputador%==NOMEDOCOMPUTADOR (goto comp2
        ) else if %nomecomputador%==NOMEDOCOMPUTADOR (goto comp3)

        Motivo do erro:
        O DOS estava interpretando o ELSE IF como um novo comando e não uma continuidade da linha anterior (de fato não existe tal comando), para corrigir o erro continuei utilizando a quebra de linha porém como você pode observar eu também inserir o parentese que fechava a linha anterior antes do ELSE IF.
        Para melhor visualizar utilizamos a quebra de linha para o código ficar mais fácil de ser entendido.

        PS.: também removi o ECHO que estava antes do (goto compx) nas linhas 2 e 3 que havia esquecido de retirar no meu primeiro exemplo.

        Qualquer coisa é só falar!

  8. Pedro
    quarta-feira, outubro 2, 2013 - 16:20 às 16:20

    Fala Thiago,
    Estou precisando criar duas *.bat, uma pra trocar apenas o DNS primário e o secundário, e outra para trocar apenas a Mascara de Subnet, você poderia me ajudar? Aqui no trabalho tenho estações com windows 7 e estações com windows xp.
    Abs

    • quinta-feira, outubro 3, 2013 - 20:53 às 20:53

      E aí Pedro tudo bem?

      Primeiro me explica um pouco melhor?
      A mudança do DNS será realizada apenas no Windows 7 ou no Windows XP assim como a mudança da mascara de rede?
      Caso as duas mudanças seja para os dois sistemas operacionais é só executar a bat com as duas alterações.
      Se for um para cada como eu disse ainda não estou conseguindo fazer da melhor forma que seria utilizando o comando VER do DOS para te dar a versão do sistema operacional, que não consegui fazer funcionar porque durante a execução da BAT o DOS não esta considerando o comando VER como váriável. A forma como eu fiz necessita de dois passos que são:
      Passo 1 – Adicionar uma variável de ambiente com a saída do comando ver
      Passo 2 – criar uma bat similar a abaixo:
      @echo on
      IF "%sistema%"=="Microsoft Windows [versÆo 6.1.7601]" GOTO windowsseven
      IF "%sistema%"=="Microsoft Windows [versÆo 5.1.2600]" GOTO windowsxp

      :windowsseven
      Echo Alterações do Windows 7
      Exit
      :windowsxp
      Echo alterações do Windows XP
      Exit

      OBS.: %sistema% é a variável de ambiente que eu criei.

  9. Wendell C. de Almeida
    terça-feira, outubro 1, 2013 - 14:20 às 14:20

    Preciso de inserir 02 (dois) ips para a mesma placa de rede, como faria ?
    A interface de rede ficaria
    IP 10.1.1.10 mask 255.255.255.0 e 192.168.1.10 mask 255.255.255.0
    Gateway: 10.1.1.1
    Via linha de comando é claro.
    Como faço ?

    • domingo, outubro 6, 2013 - 20:16 às 20:16

      Wendell, boa noite!
      Segue a reposta
      Primário
      netsh interface ipv4 set address name=”Conexão Local” static 10.1.1.10 255.255.255.0 10.1.1.1 1

      Secundário
      netsh interface ipv4 add address name=”Conexão Local” 192.168.1.10 255.255.255.0

  10. Baek
    terça-feira, julho 16, 2013 - 9:18 às 9:18

    cara muito obrigado de verdade, depois de 5 dias procurando na internet o teu blog foi o unico que encontrei o comando especificamente para o windows 8

    • terça-feira, julho 16, 2013 - 9:39 às 9:39

      Fico muito feliz em ter ajudado! E espero que os outros textos te ajudem também.

Comment pages
  1. No trackbacks yet.

Oque achou do texto?

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: