Пинговать каждый IP-адрес в текстовом файле?

9

Допустим, у меня есть текстовый файл с некоторыми именами компьютеров (каждая строка == 1 имя):

computerA
computerB
computerC
...

Можно ли создать командный файл, который пингует все эти компьютеры? И на самом деле пинг это большой выход. Мне не нужна та timeили иная информация; Я просто хотел бы знать, достижимы или нет. Любые идеи?


Теперь работает! Проблема была в том, что, как сказал Фокс, я назвал свой командный файл как ping.batping, и это тоже команда, так что это не сработало. Я переименовал свой командный файл, и теперь все в порядке.

sabisabi
источник
1
Посмотрите на forкоманду, особенно режим разбора файла.
Damien_The_Unbeliever

Ответы:

12

Попробуй это:

@echo off
for /f "delims=" %%a in (computerlist.txt) do ping -n 1 %%a >nul && (echo %%a ok) || (echo %%a failed to respond) 
pause

Если вам нужно использовать имя файла или путь с пробелами или нечетными символами, то вместо (computerlist.txt)использования( ' type "c:\folder\computer file.txt" ' )

foxidrive
источник
Я вижу, что cmd выскакивает очень скоро, а потом прошло. Даже с паузой или сном в конце я не вижу никакого выхода.
Сабисаби
Попробуйте отредактированный код выше, который включает в себя ответ ОК.
Без изменений, это странно. Я копирую точно такой же код (хорошо, я изменяю имя файла), как вы разместили там, в текстовый файл -> я сохраняю это как .bat, и после этого я запускаю файл .bat -> выскочив cmd, а затем он исчезает без любой вывод. Я использую Win XP, это может быть проблемой?
Сабисаби
Ваш путь \ имя файла, вероятно, содержит пробелы. Вместо (computerlist.txt) используйте ('type "c: \ folder \ computer file.txt"')
3
Это твоя ошибка. Всегда помните, что при именовании командного файла вы должны избегать использования имени команды. В вашем случае команда ping внутри пакетного файла выполняет пакетный файл ping, а не команду ping.
4
@Echo OFF

For /F "Usebackq Delims=" %%# in (
    "List.txt"
) do (
    Echo+
    Echo [+] Pinging: %%#

    Ping -n 1 "%%#" 1>nul && (
        Echo     [OK]) || (
        Echo     [FAILED])
)

Pause&Exit

Вывод:

[+] Pinging: www.google.com
    [OK]

[+] Pinging: ffff
    [FAILED]
ElektroStudios
источник
Когда я запускаю свой .bat, я вижу вывод [+] Pinging: computerA, но затем окно исчезает.
Сабисаби
Вы запомнили мой сценарий без изменений?
ElektroStudios
Ну, я изменил имя файла, но это все
sabisabi
@sabisabi: запустите пакетный файл «вручную» из существующей командной строки, чтобы прочитать сообщение об ошибке. Не «делайте двойной щелчок» по пакетным файлам, которые вы должны протестировать.
a_horse_with_no_name
@a_horse_with_no_name, если я запускаю файл .bat через cmd (ping.bat) -> нового окна нет, и мой cmd закрывается без каких-либо сообщений
sabisabi
1

Альтернатива, на которую вы, возможно, захотите взглянуть, - это использование PowerShell:

cls;
ForEach ($targetComputer in (Get-Content C:\installs\computerlist.txt)) {
    if (Test-Connection -ComputerName $targetComputer -Count 1 -Quiet) {
        "$targetComputer - Ping OK"
    } else {
        "$targetComputer - Ping FAIL"
    }
}

Замените константы C: \ Installs \ ComputerList.txt, и вы ушли :)

введите описание изображения здесь

Fazer87
источник
0

Я создал инструмент ping, который использует конфигурационный файл для установки IP-адресов для ping, создает до 12 окон cmd и размещает их рядом на экране. Каждое окно имеет описание в заголовке, также из файла конфигурации.

Он автоматически определяет размер экрана, но в настоящее время поддерживает только 1920x1080 и 1600x900. Вы можете создать больше разрешений вручную, хотя. Смотрите credits.txt для информации.

HellFires Pingtest v1.0

Лорд Адский Огонь
источник
0

Вы можете попробовать использовать инструмент, который я разработал, - ccmd - для решения аналогичных задач, он запускает любую терминальную команду для нескольких целей, цели можно
указать в текстовом файле csv, например: # это строка комментария #
цель, описание, команда (по умолчанию - ping)
8.8.8.8
1.1.1.1
# в ниже команда {target} будет заменена на 8.8.4.4
8.8.4.4, google DNS, ping -n 1 -w 500 {target}
192.168.1.0/30, мой подсеть
bbc.com, это новостной сайт bbc

сохраните указанный выше файл в name.txt и укажите сценарий на него с параметром -s, по умолчанию он будет запускать команду ping, если не будет задана другая команда.
Запустите его с помощью:
ccmd.exe -s name.txt -b 10 -c 30
показывает, что вывод: https://i.stack.imgur.com/23zxQ.png

скрипт написан на python, но имеет версию ccmd.exe, которую можно запускать непосредственно в windows. По умолчанию подробные данные команды сохраняются в папке ./LOG/.

Источник: https://github.com/apraksim/ccmd

apraksim
источник