Запись локального ip-адреса в текстовый файл с помощью пакетного файла

Я хочу создать пакетный файл, который записывает локальный IP-адрес в txt-файл. Когда я запускаю пакетный файл с этим кодом (путь к файлу неправильно, но это не проблема):

ipconfig | find "IP Address" > File.txt

Я получаю всю конфигурацию Windows IP (я изменил некоторые номера и прочее с xxx, чтобы не показывать всю информацию)

    IP Address. . . . . . . . . . . . : 100.100.100.223

    IP Address. . . . . . . . . . . . : 192.xxx.xxx.xxx

Я хочу писать только в файл 100.100.100.223.

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

забыл сказать, что я использую Windows XP (потому что некоторые ответы не работают на XP).

4 ответов


прочитайте первую строку только что написанного файла в переменную, используя SET /P команда, затем перезапишите файл этой строкой, используя ECHO:

ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
ECHO %first_ip%> \File.txt

обновление (в ответ на комментарии):

чтобы извлечь только IP-адрес, вы можете использовать FOR /F цикл вроде этого:

ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO (
  ECHO %%I> \File.txt
)

A FOR /F loop позволяет обрабатывать текст (файл или строковый литерал) строка за строкой, разделяя каждую строку на поля (или маркеры) основан на указанный разделитель(ы). Подробнее об этой команде можно прочитать во встроенной справке (FOR /?). Я только добавлю, что в этом случае обрабатываемая часть является строковым литералом (значение first_ip), разделитель установлен на :, и переменной цикла (%%I) получает 2nd токен, который является IP-адресом.

обратите внимание, что пробел между : и IP сохраняется, т. е. он становится частью токена ( 100.100.100.223) и, следовательно, записывается в файл тоже. Если вы не очень довольны этим, вы можете использовать подпрограмму, чтобы избавиться от пространства, например:

ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO (
  CALL :MyEcho %%I
)
:: the following command is there merely to
:: avoid running (into) the subroutine again
GOTO :EOF

:MyEcho
ECHO %1> \File.txt

при вызове подпрограммы (CALL :MyEcho %%I), аргумент передается вместе с ведущим пространством. Но при обработке командной строки подпрограммы это пространство больше не рассматривается как часть значения, потому что аргумент не цитируется, и поэтому синтаксический анализатор видит только аргумент, отделенный от имени двумя пробелами. Таким образом %1 в подпрограмме принимает адрес без ведущие космические.


for /f "tokens=2 delims=:" %%a in ('ipconfig^|find "IPv4 Address"') do (
set ip=%%a
goto :BREAK
)

:BREAK
echo %ip: =% >ip.txt

Если вы в порядке с powershell, попробуйте следующее:

powershell.exe -c "gwmi Win32_NetworkAdapterConfiguration | ? { $_.IPAddress -ne $null } | % {$_.ipaddress[0]}"

вы можете использовать autohotkey.

в окне сообщения

msgbox, %A_ipAddress%  

или если вы хотите в текстовом файле User

Fileappend, %A_ipaddress%. Ip.txt

Полезная ссылка. https://autohotkey.com/board/topic/45109-how-to-get-my-ip-address/