2016-12-12 31 views
0

我最近更換了作業,並且在我一直想要學習的一些腳本中弄髒我的手。我被給了一個現有的批處理文件,並想要搞定它。以前,此批處理文件會掃描提示您輸入的IP地址。我想改變這個來根據來自文本文件的IP地址列表來循環命令,只有我遇到問題。根據文本文件中的IP地址運行命令

我想,我可以做的兩種方式這一個:)

1運行一個批處理文件,將獲取的IP地址,然後運行基於該IP地址的第二批。

OR

2)只需使用一個現有的批處理文件,並改變以基於文本文件中的每一行的IP地址循環。

什麼是更好的方法去,你會怎麼做到這兩個?

對於#1我試圖做到這一點,但我不知道如何根據我輸入的內容來運行命令。一個例子是運行batch.bat 192.168.1.1,它在batch.bat中會嘗試ping 192.168.1.1(或者輸入任何東西)。

+0

您應該編輯您的問題並添加您的代碼 – Hackoo

回答

0

假設你已經命名的文本文件:IP_List.txt與此內容:

192.168.1.1 
192.168.1.2 
192.168.1.3 
192.168.1.4 
192.168.1.5 
192.168.1.6 
192.168.1.7 
192.168.1.8 
192.168.1.9 
192.168.1.10 
192.168.1.11 
192.168.1.12 
192.168.1.13 
192.168.1.14 
192.168.1.15 
192.168.1.16 
192.168.1.17 
192.168.1.18 
192.168.1.19 
192.168.1.20 
www.google.com 
www.stackoverflow.com 

你可以給這個批處理文件一試:MultiPingTester.bat

enter image description here

@echo off 
Title Multi-Ping hosts Tester with colors by Hackoo 2016 
call :init 
set "MyFile=IP_List.txt" 
If Not exist %MyFile% goto error 
mode con cols=65 lines=30 
set "LogFile=PingResults.txt" 
If exist %LogFile% Del %LogFile% 
echo(
call :color 0E "  ------- Ping status of targets hosts -------" 1 
echo(
(
    echo ****************************************************** 
    echo PingTest executed on %Date% @ Time %Time% 
    echo ****************************************************** 
    echo(
) > %LogFile% 
Setlocal EnableDelayedExpansion 
for /f "usebackq delims=" %%a in ("%MyFile%") do (
    ping -n 1 %%a | find "TTL=" >nul 
    if errorlevel 1 (
     call :color 0C " Host %%a not reachable KO" 1 & echo Host %%a not reachable KO >>%LogFile% 
    ) else (
     call :color 0A " Host %%a reachable OK" 1 & echo Host %%a reachable OK >>%LogFile% 
    ) 
) 
EndLocal 
Start "" %LogFile% 
pause>nul & exit 
::************************************************************************************* 
:init 
prompt $g 
for /F "delims=." %%a in ('"prompt $H. & for %%b in (1) do rem"') do set "BS=%%a" 
exit /b 
::************************************************************************************* 
:color 
set nL=%3 
if not defined nL echo requires third argument & pause > nul & goto :eof 
if %3 == 0 (
    <nul set /p ".=%bs%">%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof 
) else if %3 == 1 (
    echo %bs%>%2 & findstr /v /a:%1 /r "^$" %2 nul & del %2 2>&1 & goto :eof 
) 
exit /b 
::************************************************************************************* 
:error 
mode con cols=70 lines=3 
color 0C 
cls 
echo(
echo  ATTENTION !!! Check if the file "%MyFile%" exist ! 
pause>nul & exit 
::*************************************************************************************