Eu quero pegar apenas os endereços IP dos pings de sucesso
Eu não vou tentar consertar a segunda parte do seu arquivo de lote, é mais fácil escrever do zero.
Use o seguinte arquivo de lote (test.cmd):
@echo off
setlocal
setlocal enabledelayedexpansion
rem throw away everything except the IPv4 address line
for /f "usebackq tokens=*" %%a in ('ipconfig ^| findstr /i "ipv4"') do (
rem we have for example "IPv4 Address. . . . . . . . . . . : 192.168.42.78"
rem split on : and get 2nd token
for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
rem we have " 192.168.42.78"
rem split on . and get 4 tokens (octets)
for /f "tokens=1-4 delims=." %%c in ("%%b") do (
set _o1=%%c
set _o2=%%d
set _o3=%%e
set _o4=%%f
rem strip leading space from first octet
set _3octet=!_o1:~1!.!_o2!.!_o3!.
echo !_3octet!
)
)
)
for /l %%i in (1,1,254) do (
rem do the ping and grab the 3rd token (ip address) if it succeeds (TTL= is found)
for /f "usebackq tokens=3" %%j in ('ping -n 1 !_3octet!%%i ^| find "TTL="') do (
rem we have ip address with a trailing :
rem split on . and get the 4th token (last octet)
rem we don't need the first 3 as they are already in !_3octet!
for /f "tokens=4 delims=." %%k in ("%%j") do (
set _o4=%%k
rem strip trailing : from last octet
set _4octet=!_o4:~0,-1!
echo !_4octet!
)
)
)
endlocal
Notas:
-
O valor que você deseja é salvo em
!_3octet!!_4octet!
, onde-
! _ 3octet! é o mesmo que antes
-
! _ 4octet! é o último octeto (você não precisa de dois extrair os primeiros 3 octetos duas vezes!)
-
-
Você não precisa de
cd C:\Windows
-
Um dos endereços IP será seu endereço de gateway (roteador), você provavelmente não quer tentar executar
shutdown
no gateway!
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
- para / f - Comando Loop contra os resultados de outro comando.
- ipconfig - Configurar IP (configuração do protocolo da Internet)
- definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
- setlocal - Defina opções para controlar a visibilidade de variáveis de ambiente em um arquivo em lotes.
- variáveis - Extrai parte de uma variável (substring).