Tudo sobre batch: Apostilas, programas, dicas e tutoriais.

28 de dez. de 2008

Para encontrar o endereço IP em um arquivo de lote, você deve
primeiro encontrar o seu endereço IP e buscá-la para aparecer na
uma linha:


Nos termos do NT (e algumas máquinas Win9x) você pode executar o
IPCONFIG programa e analisar os resultados:

ipconfig.exe | find "Endereço IP" | find / V "0.0.0.0"

Windows 95 e 98 têm um programa diferente
WINIPCFG. Veja como fazer isso no Win95:

winipcfg.exe / lote% temp% \ winipcfg.out
digite% temp% \ winipcfg.out | find "Endereço IP" | find / V "0.0.0.0"

Outra possibilidade que funciona em ambos os tipos
das máquinas é a utilização ARP:
Ping.exe n-1-i 1-w 1 www.microsoft.com
arp.exe-a | find "Interface"

Se você tiver NT, deixe-me parar você aqui. NÃO
NT lote escrever código, mas me bateu essa pouco
junto. Isto irá colocar o seu endereço IP no NT
um arquivo chamado "ip3.txt":

ipconfig | find "Endereço IP"> ip1.txt
for / f "tokens = 1-2 = delims:"% i in (ip1.txt) do echo% j> ip2.txt
for / f "tokens = 1-3 delims =." % i in (ip2.txt) do echo% i% j.% k.21> ip3.txt

Você verá que Win9x soluções será muito moch
Win9x mais complicado porque não tem o poderoso
NT "para" comando opções.

Agora, sobre a essas soluções Win9x complicado ...
Agora que você tem o IP em uma linha, você tem que
extraí-lo de todas as outras palavras sobre a linha.
Isso é facilmente feito através da construção dois outros arquivos.
Um desses arquivos é uma "linha fragmento" (a única
linha com a linha NO rescisão caracteres), enquanto
o outro arquivo é um arquivo separado do lote. Neste caso,
Vou utilizar um ficheiro batch chamado "temp2.bat", so I'll
fragmento necessidade de uma linha que tem "apelo temp2.bat"
(sem as aspas, mas com a rasteira espaço), em
ele. Enquanto você poderia fazer o fragmento antes do tempo
(ver http://www.ericphelps.com/batch/lines/frag-man.htm)
Vou mostrar aqui código que irá fazer o fragmento como
necessário. O fragmento, será designada "temp.txt":

echo e 100 "temp2.bat chamada"> script
echo rcx>> script
echo f>> script
echo n temp.txt>> script
echo w>> script
echo q>> script
debug "script" lixo
del script
do lixo

Supondo que temos o fragmento, é preciso colocar o IP
dados sobre o fim do fragmento e renomeie-o como um lote
arquivo. Usando o exemplo acima NT (porque é o mais curto):

cópia temp.txt temp1.bat> lixo
ipconfig.exe | find "Endereço IP" | find / V "0.0.0.0">> temp1.bat

Eu redirecionar a saída de comandos cujos resultados não
quero ver em "junk". De acordo com Win9x, eu poderia ter redirecionado
em "nul", mas que só cria um arquivo com o NT. Então eu optar
de uniformização e deixa um arquivo chamado "lixo" obter criado. I'll
apagá-la mais tarde.

Vamos recapitular. Agora temos um pice de código que faz
o fragmento. Outra peça coloca o IP no fragmento como
"temp1.bat". Portanto, vamos espreitar o que está normalmente em "temp1.bat":

chamada temp2.bat Endereço IP. . . . . . . . . : 147.132.1.151

Obviamente, quando se corre temp1.bat, ele vai tentar ligar
algo chamado temp2.bat. E vai passar o resto da
linha de argumentação. O primeiro argumento é "IP". o segundo é
"Endereço"., Todo o caminho até o décimo segundo argumento é que
"147.132.1.151". Por isso, a nossa temp2.bat será o único em
posição de ser capaz de isolar o endereço IP.
Infelizmente, não podemos acessar variáveis superior a 9, de modo
teremos que deslocar três vezes para mover 12 estabelece a 9.
Veja o que poderia estar em temp2.bat:

deslocar
deslocar
deslocar
definir IP =% 9

Podemos construir a nossa pré-temp2.bat, ou podemos criá-lo
como este:

echo turnos> temp2.bat
echo turnos>> temp2.bat
echo turnos>> temp2.bat
echo set%% 9>> temp2.bat

Se pré-construir tudo, vamos precisar do arquivo principal do lote,
o fragmento (temp.txt), e os grupos de trabalho (arquivo temp2.bat).
Mas eu acho que é mais simples para ir para um único arquivo solução.
Aqui está todo o código de exemplo acima juntos em um arquivo:

@ echo off
:: Faça uma linha fragmento "temp.txt"
echo e 100 "temp2.bat chamada"> script
echo rcx>> script
echo f>> script
echo n temp.txt>> script
echo w>> script
echo q>> script
debug "script" lixo
del script
:: Faça o arquivo de trabalho "temp2.bat"
echo turnos> temp2.bat
echo turnos>> temp2.bat
echo turnos>> temp2.bat
echo IP =%% fixado 9>> temp2.bat
:: Executar o comando que verifica o IP e criar "temp1.bat"
cópia temp.txt temp1.bat> lixo
ipconfig.exe | find "Endereço IP" | find / V "0.0.0.0">> temp1.bat
:: Execute o temp1.bat, que vai temp2.bat, que define o IP variável
chamada temp1.bat
:: Remover arquivos temporários
del temp1.bat
del temp2.bat
del temp.txt
do lixo
:: Mostrar o resultado
echo O seu IP é% IP%

Como é habitual, nenhuma garantia de que o código acima irá trabalhar em
NT porque Eu testei-o com Win95. Aqui está o mesmo lote
arquivo modificado para o Windows 9x "winipcfg" programa:

@ echo off
:: Faça uma linha fragmento "temp.txt"
echo e 100 "temp2.bat chamada"> script
echo rcx>> script
echo f>> script
echo n temp.txt>> script
echo w>> script
echo q>> script
debug (script) lixo
del script
:: Faça o arquivo de trabalho "temp2.bat"
echo turnos> temp2.bat
echo turnos>> temp2.bat
echo turnos>> temp2.bat
echo IP =%% fixado 9>> temp2.bat
:: Executar o comando que verifica o IP e criar "temp1.bat"
cópia temp.txt temp1.bat> lixo
winipcfg.exe / lote% temp% \ winipcfg.out
digite% temp% \ winipcfg.out | find "Endereço IP" | find / V "0.0.0.0">> temp1.bat
:: Execute o temp1.bat, que vai temp2.bat, que define o IP variável
chamada temp1.bat
:: Remover arquivos temporários
del temp1.bat
del temp2.bat
del temp.txt
do lixo
del% temp% \ winipcfg.out
:: Mostrar o resultado
echo O seu IP é% IP%

Como você pode ver, exactamente o mesmo, excepto para os dois
linhas necessárias para winipcfg. Agora aqui é modificado para
utilizar o ARP programa:

@ echo off
:: Faça uma linha fragmento "temp.txt"
echo e 100 "temp2.bat chamada"> script
echo rcx>> script
echo f>> script
echo n temp.txt>> script
echo w>> script
echo q>> script
debug lixo
del script
:: Faça o arquivo de trabalho "temp2.bat"
echo conjunto IP =% 2%> temp2.bat
:: Executar o comando que verifica o IP e criar "temp1.bat"
cópia temp.txt temp1.bat> lixo
Ping.exe n-1-i 1-w 1 www.microsoft.com> lixo
arp.exe-a | find "Interface">> temp1.bat
:: Execute o temp1.bat, que vai temp2.bat, que define o IP variável
chamada temp1.bat
:: Remover arquivos temporários
del temp1.bat
del temp2.bat
del temp.txt
do lixo
:: Mostrar o resultado
echo O seu IP é% IP%

Finalmente, você pode obter um erro sobre estar fora de
ambiente espacial, sempre que você tentar executar um lote
arquivo que define variáveis. A solução mais fácil é
ao não definir a variável! Por exemplo, o temp2.bat
poderia ser modificado a partir do presente:

echo conjunto IP =% 2%> temp2.bat

para isso:

echo echo O seu IP é%% 2> temp2.bat

Naturalmente, você poderia substituir%% 9% para os 2%, se eu mostrar
usou os dois primeiros (IPCONFIG ou WINIPCFG)
exemplos. Você também não precisaria as duas últimas linhas
no código:

:: Mostrar o resultado
echo O seu IP é% IP%

porque o visor seria tratado em temp2.bat.

FONTE

0 comentários:

Postar um comentário