2014-02-20 2 views
0

ЯЗЫК пакетногоПроцесс «Tracert» выход (ПАРТИЯ)

Итак, название говорит все это ... Мне нужно обработать tracert выход, чтобы захватить IP-адрес и только IP-адрес. Могу сказать, что используется команда for, и, к счастью, у меня есть небольшой опыт работы с for.

Поскольку мы, очевидно, будем использовать разделители, и так как это ms слово с IP рядом с ним, я не должен делать

for /f "tokens=2 delims=ms" %%a in ('tracert google.com') do echo set %%a=ip&echo ip>ips.txt 

Поскольку ms является ограничителем, IP-адреса должны быть обрабатывается, правильно?

Вместо этого, я получаю это действительно странный вывод:

img

Hao ДЕЛАТЬ ??? СОП

КТО, ЭТО КАК ЭТО СМОТРЕТЬ, ЕСЛИ Я ТРАДИЦИОННЫЙ ТРАКЕРТ.

enter image description here

+0

Не могли бы вы перефразировать свой вопрос при кодировании командного файла, поскольку это сделает его нам легче понять и помочь. – Monacraft

ответ

0

1 - Почему все линии? Команда выполняется в командной строке, включено эхо и для каждого выполнения цикла for строка с исполняемой командой эхо передается на консоль, и по мере того, как эта строка выполняет команду эха, результат также повторяется.

2 - Почему данные не найдены верно?

  • ЬгасегЬ возвращает больше строк, чем с IP-адресами, и вы не фильтруя их

    пункт
  • delims принимает последовательность отдельных символов, которые используются в качестве разделителей, а не полные слова. Во всяком случае, он мог бы работать, так как все символы m и s считаются разделителями, но

  • ip-адрес на выходе команды tracert не является вторым токеном в вашем выводе, поэтому для каждой из строк вы являетесь не извлекая adecuated части и

  • для каждой строки выполнить команду набора, но

    а) вам не нужно, чтобы эхо-адреса IP в файл и

    б) множество команд должно быть записано в обратном порядке set var=value (или, может быть, я не понимаю, что вы делаете, извините, в этом случае), поэтому должно быть set ip=%a

    c) Предполагая, что все предыдущие исправлены, оно все равно не будет работать. Значение переменной ip изменяется внутри той же строки/блока, где вы пытаетесь ее эхо. Но чтение переменной было устранено (все считанные заменены значениями переменных перед началом выполнения строки) парсером, когда была достигнута линия кода.Требуется отсроченное расширение в этом случае

3 - Как решить?

Для непосредственного решения командной строки (как в вашем вопросе) это должно сделать трюк

(@for /f "tokens=8" %a in ('tracert -4 -d 10.10.10.10^|find "ms"') do @echo %a)>ips.txt 

Результат ЬгасегЬ является filterted только для линий с ms в них. Трассировка выполняется только в ipv4 и без разрешения имени для получения согласованного количества столбцов на выходе, выбирается eigth colum/token (где показан IP-адрес), и прямое значение в переменной отражается. Все отправляется в файл и во избежание включения выполненных команд используется @command (эквивалентно для echo off для одной команды)

+0

Ahhh !! Восемь токенов? Можете ли вы объяснить, почему? Как я уже говорил вам, когда использовал мои Темные искусства, я просто понял «за». Пожалуйста, дополните? – EpicTonic

+0

@EpicTonic, просто разбивая на пробелы, строки с достоверными данными на них имеют «число, время, мс, время, мс, время, мс, ip», поэтому поле ip - это восемь в списке. –

+0

@EpicTonic, 'tokens = 8' не запрашивает номер (всего) токенов, но перечисляет токен в строке, которая должна обрабатываться. В этом случае только один токен, восемь в строке после расщепления с использованием разделителей. –

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