2

Я пытаюсь, чтобы cmd копировал только определенный набор символов из вывода команды. Я был в состоянии выбрать строку, в которой существует фраза, но оттуда я потерян. Вот моя команда до сих пор.

ipconfig | findstr /i "ipv4"

Я уверен, что вы знакомы с командой ipconfig и командой findstr . В основном я изолирую IPv4-адрес конкретного компьютера. Это то, что приведенная выше команда.

IPv4 Address. . . . . . . . . . . : 192.168.1.75

Я хотел бы выделить "192.168.1." и сохранить его в переменной, которая будет использоваться гораздо позже в команде. Скажите, что я установил «192.168.1». к переменной a .

Следующая команда, которую я хочу запустить, сканирует все IP-адреса с 192.168.1.1 по 192.168.1.254 и сохраняет то, что используется. Так как это, скоро будет программа, будет запускаться на разных компьютерах в разных местах «192.168.1». будет другим, и я хочу изолировать все, что cmd помещает в его местоположение. Таким образом, вышеупомянутая переменная а может быть , но не ограничиваясь этим, 192.168.10., 10.10.10., Или даже 1.1.1. в зависимости от ситуации. Вот код, который я буду использовать.

FOR /L %i IN (1,1,254) DO ping -n 1 (the 'a' variable)%i | FIND /i "bytes=">>c:\ipaddresses.txt

или если помогает понять, как будет выглядеть переменная.

FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i | FIND /i "bytes=">>c:\ipaddresses.txt

Я использую 64-битную Windows 10 Pro Machine.

2 ответа2

3

Я хотел бы выделить "192.168.1." и сохранить это в переменную

Используйте следующий пакетный файл (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

Заметки:

  • Требуемое значение сохраняется в _3octet
  • Удалить echo которое есть для отладки
  • Замените rem add additional commands here на ваш "сетевой пинг"

Пример использования и вывод:

F:\test>ipconfig | findstr /i "ipv4"
   IPv4 Address. . . . . . . . . . . : 192.168.42.78

F:\test>test
192.168.42.

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • enabledelayedexpansion - отложенное расширение приведет к тому, что переменные будут расширяться во время выполнения, а не во время анализа.
  • for /f - Циклическая команда против результатов другой команды.
  • ipconfig - настройка IP (настройка интернет-протокола)
  • set - отображать, устанавливать или удалять переменные окружения CMD. Изменения, сделанные с помощью SET, будут сохраняться только в течение текущего сеанса CMD.
  • setlocal - устанавливает параметры для контроля видимости переменных среды в командном файле.
  • переменные - извлечение части переменной (подстроки).
0

Попробуйте что-то вроде этого. «ipconfig /all> network_info.txt» просто создает текстовый файл для программы

ipconfig /all > network_info.txt
type network_info.txt | findstr /v Stuff | findstr /v Etc > whatyouwant.txt
set /p Build=<whatyouwant.txt

Этот вариант трудоемкий, но невероятно простой. Вы должны продолжать делать

| findstr /v something

и заменить слово на то, что вы хотите. Вы должны решить, как вы хотите удалить определенные слова из разных строк, но это будет работать, если вы хотите просто. Я использую это в выходных данных для команд, чтобы удалить мусор, который я не хочу. В идеале вы должны поместить выход в текст, и он будет читать первую строку, чтобы у вас была только одна строка текста. Надеюсь, я помог или помог кому-либо, кто нуждался в этом ответе. Это запутанно, но вы получите ответ в текстовом виде, если это плюс

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .