Пинг IP-адрес и сохранить результат в текстовый файл.

1

Я пытаюсь открыть список IP-адресов и пинговать их, а затем сохранить ответ в файл TXT. Пинг проходит и запускается без проблем и правильно сообщает, но я могу получить его, чтобы сохранить результаты в текстовом файле.

@echo off

SET LOGFILE=MyLogFile.log
call :Logit >> %LOGFILE% 
exit /b 0

for /f "delims=" %%a in ( ' type "C:\Users\kelly\Desktop\Ping\computerlist.txt" ' ) do ping -n 1 %%a >nul && (echo %%a ok >> %LOGFILE% ) || (echo %%a failed to respond >> %LOGFILE% ) 
pause
Келли
источник
Это выдержка из вашего командного файла? Я не вижу ярлык для Logit, просто оператор вызова.
sippybear
@sippybear нет, это весь мой сценарий. Я, вероятно, пропустил что-то, что я обычно не собираю в файлах bat, поэтому я гуглил и собирал вещи. Все было хорошо до момента добавления результатов в текстовый файл.
Келли

Ответы:

1
@echo off
SET LOGFILE=C:\Temp\MyLogFile.log
SET PINGLIST=C:\Users\kelly\Desktop\Ping\computerlist.txt
for /f "delims=" %%a in (%PINGLIST%) DO ping -n 1 %%a > nul && (echo %%a is ok >> %LOGFILE%) || (echo %%a is unreachable! >> %LOGFILE%)

Просто убедитесь, что в списке компьютеров есть только одно имя хоста в каждой строке.

Ввод (computerlist.txt)

gooobler
google.com
msn.com
localhost

Выход (MyLogFile.log)

gooobler is unreachable! 
google.com is ok 
msn.com is unreachable! 
localhost is ok 
sippybear
источник
Получил это работать, я должен был управлять этим как администратор
Келли
0

Где у вас есть do ping -n 1 %%a >nul

Это берет вывод ping и выбрасывает его.

Я думаю ты хочешь

do ping -n 1 %%a >%LOGFILE%

Кроме того, вы вызываете несуществующий регион / подпрограмму (Logit)

@echo off

SET LOGFILE=MyLogFile.log
call :Logit >> %LOGFILE% 
exit /b 0

:Logit
for /f "delims=" %%a in ( ' type "C:\Users\kelly\Desktop\Ping\computerlist.txt" ' ) do ping -n 1 %%a >nul && (echo %%a ok >> %LOGFILE% ) || (echo %%a failed to respond >> %LOGFILE% ) 
pause

(Непроверенные)

~~ Редактировать на основе комментария ОП и теперь протестировав ~~

Я думаю, это то, что вы ищете:

@ECHO OFF
SET LOGFILE=logFile.txt
SET TEMP_FILE=temp.txt
SET PINGLIST=comps.txt


REM contatenate log file
echo. > %LOGFILE%

for /f "delims=" %%a in (%PINGLIST%) do (
    REM do ping and store response - using a temp file because we care about the response more than once.
    ping -n 1 %%a > %TEMP_FILE%

    REM append response to log file
    type %TEMP_FILE% >> %LOGFILE%

    REM from: https://stackoverflow.com/a/8531199
    REM check if ping determined the host is unreachable by searching the output
    findstr /c:"Destination host unreachable" /c:"could not find host" %TEMP_FILE% > NUL

    REM if the errorlevel is at least 1 (unsuccessful at finding string)
    if errorlevel 1 (
        REM then must have reached host
        echo %%a is ok >> %LOGFILE%
    ) ELSE (
        REM else, we found the string that sais we cannot reach the host
        echo %%a is UNREACHABLE^! >> %LOGFILE%
    )
    REM cleanup
    del %TEMP_FILE%
)
exit /b
mshafer
источник
Так что теперь у меня есть это. @echo off SET LOGFILE=C:\Users\kelly\Desktop\Ping\MyLogFile.log SET PINGLIST=C:\Users\kelly\Desktop\Ping\computerlist.txt for /f "delims=" %%a in (%PINGLIST%) do ping -n 1 %%a > %LOGFILE% && (echo %%a is ok >> %LOGFILE%) || (echo %%a is unreachable! >> %LOGFILE%) Это работает, однако, это только пишет в первую строку, и если два терпят неудачу тогда, это показывает только последнюю, которая будет запущена. Я хочу показать, если это не удалось, если он был успешным на всех из них.
Келли
Хммм, я думаю, что вы хотите сделать ping -n 1 %%a > %LOGFILE%аппенд вместо этого ( ping -n 1 %%a >> %LOGFILE%), но я не думаю, что это решит все ваши проблемы. Потому что ping возвращает 0 (считается успешным, если он получает ответ даже от вашего днс, сообщающего, что пункт назначения недоступен).
mshafer
@ Келли Я обновил свой пост. Вам нужно настроить пути к файлам, которые вы хотите использовать, но я думаю, что это будет работать для вас. (Если у вас могут быть пробелы в путях, вам также нужно будет заключать в кавычки переменные, когда они используются).
mshafer