1

Тема: CMD/BAT: выделить из вывода команды ipconfig только адрес, без точек

Здравствуйте!
Необходимо выделить из вывода команды ipconfig только ip-адрес, причём без точек.

С первой частью справился так:

for /f "skip=37 tokens=14" %%a in ('ipconfig') do
(
    echo %%a >> ipaddr.txt
)
exit /b

Точки думал убрать расширенной подстановкой переменных:

echo %%a:.=% >> ipaddr.txt

Но внутри цикла расширенная подстановка работать отказывается.

Соответственно, два вопроса:
-решается ли задача моим способом, и если решается, то где я ошибся?
-как можно решить по-другому?

2

Re: CMD/BAT: выделить из вывода команды ipconfig только адрес, без точек

fsc_psd пишет:

только ip-адрес, причём без точек.

Хм, а как потом разбирать будете, если цифр <12?

@echo off
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|findstr /c:IP-') do (
set ip=%%a
call echo %%ip:.=%% >>ipaddr.txt
)

3 (изменено: fsc_psd, 2011-01-08 09:43:51)

Re: CMD/BAT: выделить из вывода команды ipconfig только адрес, без точек

Хм, а как потом разбирать будете, если цифр <12?

Ахаха, и верно! Первые два октета известны заранее, и я в горячке априори принял, что можно будет отчленить и оставшиеся два. Ошибка.  Задача переходит в разряд теоретических.

@echo off
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|findstr /c:IP-') do (
set ip=%%a
call echo %%ip:.=%% >>ipaddr.txt
)

Не могли бы вы пояснить этот пример? Зачем set и почему call и откуда четвёртый знак процента?

P.S. По ходу пьесы возник вопрос ещё одного, дополнительного преобразования адреса: отсечь, например, первые пять символов. Подскажите, пожалуйста, можно ли его реализовать в рамках вышеописанного цикла? Вариант с еще одним циклом, обрабатывающим файл, получившийся на выходе предыдущего, очевидно громоздок.

P.P.S Вкратце опишу идею, на всякий случай. Нужно периодически выкладывать на общедоступный фтп-сервер слегка замаскированный результат команды ipconfig, т.к. адрес часто меняется и неплохо бы иметь представление о том, каков он в данный момент. Самый простой способ, конечно, это пихать вывод ipconfig в запароленный архив или в фтп-папку с ограниченным доступом, но я вот что-то решил так попробовать, надеюсь с вашей помощью получится. В идеале мне нужен адрес без первых семи символов (два октета (2+3) и две точки, итого 7) и с дефисом в виде разделителя. Например, 15-252.

4

Re: CMD/BAT: выделить из вывода команды ipconfig только адрес, без точек

> Зачем set
конструкция %var:.=% не работает с переменными вида %%х
> почему call
было лень писать 2(3?) строчки

setlocal enabledelayedexpansion
echo !ip:.=!

> откуда четвёртый знак процента?
четвёртый и второй нужны для call
> P.P.S

@echo off
for /f "tokens=2 delims=:" %%a in ('ipconfig ^|findstr /c:IP-') do (
for /f "tokens=3* delims=." %%b in ("%%a") do echo %%b-%%c >>ipaddr.txt
)

5

Re: CMD/BAT: выделить из вывода команды ipconfig только адрес, без точек

Спасибо!