根据文本文件中的IP地址运行命令

时间:2016-12-12 14:05:51

标签: batch-file command prompt

我最近改变了工作岗位,并且在一些我一直想学习的脚本上弄脏了。我得到了一个现有的批处理文件,并希望对它起草作用。以前,此批处理文件将扫描提示您输入的IP地址。我想改变这个来根据文本文件中的IP地址列表循环命令,只是我有问题这样做。

我认为我可以通过以下两种方式之一做到这一点:

1)运行将获取IP地址的批处理文件,然后根据该IP地址运行第二批。

OR

2)只需使用一个现有批处理文件,并根据文本文件每行的IP地址将其更改为循环。

什么是更好的方式,你将如何实现两者?

对于#1我尝试这样做,但我不知道如何根据我输入的内容运行命令。一个例子就是运行batch.bat 192.168.1.1,它在batch.bat中会尝试ping 192.168.1.1(或者无论输入什么)。

1 个答案:

答案 0 :(得分: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
::*************************************************************************************