windows cmd, чтобы получить адрес шлюза по умолчанию [duplicate]

SQL Server 2017 вводит новую агрегатную функцию

STRING_AGG ( expression, separator) .

Объединяет значения строковых выражений и значений разделителей мест между ними. Сепаратор не добавляется в конце строки.

Конкатенированные элементы можно упорядочить, добавив WITHIN GROUP (ORDER BY some_expression)

. Для версий 2005-2016 я обычно использую XML метод в принятом ответе.

Однако это может быть неудачным при некоторых обстоятельствах. например если данные, которые будут конкатенированы, содержат CHAR(29), вы видите

FOR XML не может сериализовать данные ... потому что он содержит символ (0x001D), который не разрешен в XML.

Более надежным методом, который может обрабатывать все символы, будет использование агрегата CLR. Однако применение этого подхода к сложным элементам сложнее.

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

4
задан MasterT 13 March 2014 в 03:08
поделиться

3 ответа

set "ip="
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "Default"') do if not defined ip set ip=%%b

Взгляните на список из ipconfig - вероятно, существует более одной строки default. Поэтому вы получите данные из строки last, содержащей default

. Вышеупомянутая конструкция возвращает строку first, содержащую default.

2
ответ дан Magoo 28 August 2018 в 22:22
поделиться

Вот сценарий WMIC:

@echo off
for /f "tokens=2,3 delims={,}" %%a in ('"WMIC NICConfig where IPEnabled="True" get DefaultIPGateway /value | find "I" "') do echo IPv4 %%~a IPV6 %%~b
pause
4
ответ дан foxidrive 28 August 2018 в 22:22
поделиться
for /f "tokens=1-5" %%a in ('route -4 print 0.*'
) do @if "%%e"=="" if "%%a"=="%%b" set "ip=%%c"

Это извлечет шлюз по умолчанию из таблицы маршрутов ipv4.

1
ответ дан MC ND 28 August 2018 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: