2013-03-14 2 views
1

Мне нужно извлечь имена хостов внутри выходов «ping -a», но я не могу понять это, я думал об использовании регулярных выражений. Мне нужно было бы выделить символы между и  [, чтобы получить computername.windowsdomain., похоже ли это? Я не могу найти хорошие ресурсы для пакетного регулярного выражения онлайн, это все о JS, PHP и .NET.Как извлечь имя хоста внутри вывода «ping -a»?

Как я французский выход ping -a начинается с:

Envoi d'une requête 'ping' sur XXXXXXXX.DOMAIN.NAME.com [127.0.0.1] 
+0

«r» (backspace after «r») <- Скажите, что? Вы имеете в виду '' r "', как в символе r, за которым следует пробел в качестве вашего примера или r \? Пожалуйста, укажите примерную линию вывода, чтобы можно было найти решение. – Jite

+0

Вместо этого вы не можете использовать команду _hostname_? –

+0

«hostname» выполняется локально в пакетном скрипте, я бы получил свое собственное имя хоста, если бы сделал это. – user2156699

ответ

1

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

В любом случае, вы, вероятно, может сойти с рук что-то вроде следующего:

set hostname= 
for /f "skip=1 tokens=2" %%x in ('ping -n 1 -a so.me.i.p') do if not defined hostname set hostname=%x 
echo %hostname% 
+0

Большое спасибо за ваш ответ. Я нашел решение только с использованием токенов в цикле for/f: 'for/f" tokens = 6 delims = "%% G in ('ping -a -n 1 -w 0 74.125.79.94^| найти "[" ') установить hostname = %% G' Но я столкнулся с другой проблемой здесь, я хочу проанализировать вывод '%% G' в журнале, но не' echo% hostname% >> log.txt 'или' echo %% G >> log.txt' будет работать. Любые идеи об этом? – user2156699

0
@ECHO OFF 
SETLOCAL 
FOR /f "delims=" %%i IN ('ping -n 1 -a 127.0.0.1^|find "["') DO CALL :sub %%i 
ECHO hostname: %hostname% 
ECHO domain: %domain% 
ECHO whole chebang: %chebang% 
GOTO :eof 

:sub 
SET hostname=%2 
IF NOT %hostname:~0,1%==[ shift&GOTO sub 
SET chebang=%1 
FOR /f "tokens=1*delims=." %%a IN ("%1") DO SET hostname=%%a&SET domain=%%b 
GOTO :eof 

Должно работать для вас. Переменные имена не являются моей областью знаний ...

+0

Большое спасибо за ваш ответ. Я нашел решение только с использованием токенов в цикле for/f: 'for/f" tokens = 6 delims = "%% G in ('ping -a -n 1 -w 0 74.125.79.94^| найти "[" ') установить hostname = %% G' Но я столкнулся с другой проблемой здесь, я хочу проанализировать вывод '%% G' в журнале, но не' echo% hostname% >> log.txt 'или' echo %% G >> log.txt' будет работать. Любые идеи об этом? – user2156699

+0

Зависит именно от того, где вы его положили - будь то в контексте FOR или снаружи. Что на самом деле произошло, когда вы попробовали свой ECHO - что-нибудь вообще появилось в файле? Попробуйте изменить его на что-то вроде 'echo FINDME% ...', чтобы вы могли видеть, выполняется ли сама инструкция. Вы выполнили код, который я опубликовал выше, и это привело к ожидаемому результату? – Magoo

+0

код работал отлично! когда I echo %% G выводится: «% G» – user2156699

Смежные вопросы