Ping ที่อยู่ ip และบันทึกผลลัพธ์ลงในไฟล์ txt


1

ฉันกำลังพยายามเปิดรายการที่อยู่ ip และ ping พวกเขาแล้วบันทึกการตอบรับลงในไฟล์ TXT ping วนซ้ำและทำงานโดยไม่มีปัญหาและรายงานอย่างถูกต้อง แต่ฉันสามารถทำให้บันทึกผลลัพธ์ลงในไฟล์ข้อความได้

@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 ไม่มีนี่เป็นใบปลิวทั้งหมดของฉัน ฉันอาจจะพลาดบางสิ่งบางอย่างที่ฉันไม่ได้สร้างไฟล์ค้างคาวดังนั้นฉันจึง googling และรวบรวมสิ่งต่างๆเข้าด้วยกัน ทุกอย่างดีจนถึงจุดเพิ่มผลลัพธ์ไปยังไฟล์ txt
Kelly

คำตอบ:


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 

เข้าใจแล้วใช่ไหมฉันต้องทำงานเป็นผู้ดูแลระบบ
Kelly

0

ที่ที่คุณมี do ping -n 1 %%a >nul

นั่นคือการเอา ping output และทิ้งมันไป

ฉันคิดว่าคุณต้องการ

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

(ทดสอบ)

~~ แก้ไขตามความคิดเห็นของ OP และตอนนี้ต้องผ่านการทดสอบ ~~

ฉันคิดว่านี่คือสิ่งที่คุณกำลังมองหา:

@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

ดังนั้นตอนนี้ฉันมีสิ่งนี้ @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%) มันใช้งานได้ แต่มันเขียนไปยังบรรทัดแรกเท่านั้นและถ้าสองล้มเหลวก็จะแสดงเฉพาะบรรทัดสุดท้ายที่จะวิ่ง ฉันต้องการที่จะแสดงว่ามันล้มเหลวถ้ามันประสบความสำเร็จกับพวกเขาทั้งหมด
Kelly

อืมฉันคิดว่าคุณต้องการทำ ping -n 1 %%a > %LOGFILE% ผนวกแทน ( ping -n 1 %%a >> %LOGFILE% ) แต่ฉันไม่คิดว่านี่จะแก้ปัญหาทั้งหมดของคุณ เนื่องจาก ping ส่งคืนค่า 0 (ถือว่ามันประสบความสำเร็จตราบใดที่มันได้รับการตอบสนองใด ๆ แม้จาก dns ของคุณที่บอกว่าปลายทางนั้นไม่สามารถเข้าถึงได้)
mshafer

@ เคลลี่ฉันอัปเดตโพสต์ของฉัน คุณจะต้องปรับแต่งพา ธ ของไฟล์กับสิ่งที่คุณต้องการใช้ แต่ฉันคิดว่ามันจะใช้ได้ผลสำหรับคุณ (หากคุณอาจมีช่องว่างในพา ธ คุณจะต้องใส่เครื่องหมายคำพูดรอบ ๆ ตัวแปรเมื่อใช้)
mshafer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.