В оболочке Windows7 у меня есть следующий рабочий код для вывода текущего IP-адреса:
@echo off
:: get ipv4
ipconfig | findstr IPv4 | findstr 172 > ipadd.txt
:: For statement to find the numbers
for /F "tokens=13" %%i in (ipadd.txt) do (
echo %%i
)
del ipadd.txt /Q
Однако я не хочу, чтобы IP-адрес выводился на печать, а сохранялся в переменной, как в следующем (нерабочем) фрагменте кода:
@echo off
:: get ipv4
ipconfig | findstr IPv4 | findstr 172 > ipadd.txt
:: For statement to find the numbers
for /F "tokens=13" %%i in (ipadd.txt) do (
set ip=%%i
)
del ipadd.txt /Q
echo IP is $ip
Ожидаемый результат (пример)
IP-адрес 123.456.7.8
фактический выход -
IP-адрес — это $ip
Как это исправить?
решение1
Вы отметили свой вопрос тегом [bash]. Вынетнаписание скрипта для bash
или sh
или чего-либо, даже отдаленно похожего на оболочку Bourne. Пакетные скрипты Windows обычно запускаются в cmd.exe
оболочке, потомке COMMAND.COM
MS-DOS, и имеют совершенно другой синтаксис.
В частности,%name%
, нет$name
, — это синтаксис переменных в пакетных скриптах Windows и MS-DOS.
echo IP is %ip%
Пока вы этим заняты:
for /F "tokens=13" %%i in ('ipconfig | findstr IPv4 | findstr 172') do (