检查Ping是否无法连接并写入日志

时间:2020-03-31 07:02:45

标签: windows batch-file

我编写了一个批处理脚本,该脚本连接到网络驱动器并使用文本文档中的IP列表复制文件-脚本如下。

TITLE Upgrading Contactless Price Limit
ECHO starting  >> UpgradeLog.log
@ECHO on

rem CLS

echo Collect IP Address List
SET ListIP=C:\PMC\30To45Upgrade\tills.txt


echo Sets the folder we will use
SET PMC=C:\PMC\30To45Upgrade\VX820_cont45_Config\

ECHO Begin Mapping and Copying
ECHO.

echo Starts a FOR loop using the selected IP list

FOR /F %%a IN (%ListIP%) DO (

    echo This will attempt to log into the C$ share of the target PC.
    net use \\%%a\c$ /u:username password >NUL >> UpgradeLog.log

    ECHO.
    ECHO Copying directory to: %%a... >> UpgradeLog.log
    ECHO.

    echo Uses the Robocopy command to send the folder to the specified Till

    mkdir \\%%a\c$\retailjava\icc\VX820_cont45_Config
    C:\robocopy.exe %PMC% \\%%a\c$\retailjava\icc\VX820_cont45_Config /e /r:0 /w:10 /v /z >> UpgradeLog.log

    ECHO.
    ECHO Disconnecting from %%a... >> UpgradeLog.log
    ECHO.

    echo Disconnected from the share.
    net use \\%%a\c$ /DELETE>NUL >> UpgradeLog.log)
ECHO.  >> UpgradeLog.log
pause

但是,如果IP处于脱机状态,则需要花费很长时间才能失败并转移到下一个-我认为最好的解决方案是先对IP地址执行ping操作,如果不响应,则继续进行下一个操作

所以这样的代码块

FOR /F %%a IN (%ListIP%) DO (
ping %%a >> Failed.log
)

无论该块是否连接,它都会写入,而我只希望失败的ping操作-因此不确定如何执行此操作。

如果我这样在我的代码中输入它-即使它失败,它也会继续进行到robocopy中,因此据我所知,它需要某种if / else语句,但不确定如何实现。有帮助吗?

尝试修复

TITLE Upgrading Contactless Price Limit
ECHO starting  >> UpgradeLog.log
@ECHO on

rem CLS

echo Collect IP Address List
SET ListIP=C:\PMC\30To45Upgrade\tills.txt


echo Sets the folder we will use
SET PMC=C:\PMC\30To45Upgrade\VX820_cont45_Config\

ECHO Begin Mapping and Copying
ECHO.

echo Starts a FOR loop using the selected IP list

FOR /F %%a IN (%ListIP%) DO (

ping %%a | find "TTL=" && (

    echo This will attempt to log into the C$ share of the target PC.
    net use \\%%a\c$ /u:username password >NUL >> UpgradeLog.log

    ECHO.
    ECHO Copying directory to: %%a... >> UpgradeLog.log
    ECHO.

    echo Uses the Robocopy command to send the folder to the specified Till

    mkdir \\%%a\c$\retailjava\icc\VX820_cont45_Config
    C:\robocopy.exe %PMC% \\%%a\c$\retailjava\icc\VX820_cont45_Config /e /r:2 /w:10 /v /z >> UpgradeLog.log

    ECHO.
    ECHO Disconnecting from %%a... >> UpgradeLog.log
    ECHO.

    echo Disconnected from the share.
    net use \\%%a\c$ /DELETE>NUL >> UpgradeLog.log

) || (
    echo %%a Failed to connect >> failed.log
)
)
ECHO.  >> UpgradeLog.log
pause

1 个答案:

答案 0 :(得分:0)

FOR /F %%a IN (%ListIP%) DO (
  ping %%a | find "TTL=" && (
    echo %%a is reachable
    rem insert your payload here
  ) || (
    echo %%a is not available
  )
)

其中&&充当“如果先前的命令(find)成功则”而||充当“如果先前的命令(find)则失败”(行为此处为“ else”)