
Estou tentando fazer com que o cmd copie apenas um conjunto específico de caracteres de uma saída de comando. Consegui selecionar a linha em que a frase existe, mas a partir daí estou perdido. Aqui está meu comando até agora.
ipconfig | findstr /i "ipv4"
Tenho certeza que você está familiarizado com o ipconfig
comando e o findstr
comando. Basicamente estou isolando o endereço IPv4 do computador específico. Isto é o que o comando acima.
IPv4 Address. . . . . . . . . . . : 192.168.1.75
Gostaria de isolar "192.168.1." e salve-o em uma variável para ser usada muito mais tarde em um comando. Digamos que eu configurei “192.168.1”. para variável a
.
O próximo comando que desejo executar verifica todos os endereços IP de 192.168.1.1 a 192.168.1.254 e salva o que estiver sendo usado. Como este programa, que será lançado em breve, será executado em diferentes computadores em vários locais, o "192.168.1." será diferente e estou tentando isolar tudo o que o cmd colocar em seu local. Então a variável mencionadaapoderia ser, mas não está limitado a, 192.168.10., 10.10.10. ou mesmo 1.1.1. dependendo da situação. Aqui está o código que irei usar.
FOR /L %i IN (1,1,254) DO ping -n 1 (the 'a' variable)%i | FIND /i "bytes=">>c:\ipaddresses.txt
ou se ver como será a aparência da variável ajuda.
FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i | FIND /i "bytes=">>c:\ipaddresses.txt
Estou usando uma máquina Windows 10 Pro de 64 bits.
Responder1
Gostaria de isolar "192.168.1." e salve isso em uma variável
Use o seguinte arquivo em 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!
)
)
)
rem add additional commands here
endlocal
Notas:
- O valor que você deseja é salvo em
_3octet
- Remova o
echo
que está lá para depuração - Substitua
rem add additional commands here
pelo seu "ping de rede"
Exemplo de uso e saída:
F:\test>ipconfig | findstr /i "ipv4"
IPv4 Address. . . . . . . . . . . : 192.168.42.78
F:\test>test
192.168.42.
Leitura adicional
- Um índice AZ da linha de comando do Windows CMD- Uma excelente referência para todas as coisas relacionadas à linha cmd do Windows.
- habilitadodelayedexpansion- A expansão atrasada fará com que as variáveis sejam expandidas no tempo de execução, e não no tempo de análise.
- para /f- Comando de loop em relação aos resultados de outro comando.
- ipconfig- Configurar IP (configuração do protocolo de Internet)
- definir- Exibir, definir ou remover variáveis de ambiente CMD. As alterações feitas com SET permanecerão apenas durante a sessão CMD atual.
- definirlocal- Defina opções para controlar a visibilidade das variáveis de ambiente em um arquivo em lote.
- variáveis- Extraia parte de uma variável (substring).
Responder2
Isso funciona para mim em vários computadores:
for /F "tokens=14" %A in ('"ipconfig | findstr IPv4"') do echo %A
Responder3
Tente algo assim. o "ipconfig /all > network_info.txt" apenas cria um arquivo txt para o programa
ipconfig /all > network_info.txt
type network_info.txt | findstr /v Stuff | findstr /v Etc > whatyouwant.txt
set /p Build=<whatyouwant.txt
Esta opção é demorada, mas incrivelmente simples. Você teria que continuar fazendo
| findstr /v something
e substituindo a palavra pelo que você deseja. Você teria que decidir como gostaria de remover certas palavras de linhas diferentes, mas isso funcionaria se você quiser algo simples. Eu uso isso nas saídas de comandos para remover o lixo que não quero. O ideal é que você coloque a saída em um txt, e ele leia a primeira linha, então você terá apenas uma linha do txt. Espero ter ajudado ou ajudado alguém que precisava desta resposta. É complicado, mas você também recebe sua resposta em um txt, se isso for uma vantagem
Responder4
Para atribuir endereços IP a variáveis de ambiente numeradas sucessivamente (IP1, IP2). Para sistemas com vários adaptadores de rede.
@echo off
setlocal enabledelayedexpansion
set _count=1
for /f "usebackq tokens=*" %%a in (`ipconfig ^| findstr /i "ipv4"`) do (
for /f delims^=^:^ tokens^=2 %%b in ('echo %%a') do (
for /f "tokens=*" %%c IN ('echo %%b') do (set IP!_count!=%%c & echo IP!_count!=%%c & set /a _count+= 1)
)
)
set _count=
call :haltAndStore 2> nul
REM kludge: Forces batch processor to abort causing side-effect of persisting env vars.
:haltAndStore
()