Проверьте, не удается ли Ping подключиться, и запишите в журнал - PullRequest
0 голосов
/ 31 марта 2020

Я написал пакетный сценарий, который подключается к сетевым дискам и копирует файлы с использованием списка 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:rbsgeneric BMr3ta1l  >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-адрес и если он не отвечает, перейти к следующему

Итак, блок кода, подобный этому

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

Однако этот блок будет писать, если он подключен или нет, и я просто хочу неудачные эхо-запросы - поэтому не уверен, как это сделать.

Также, если я введу это в свой код, как это - даже если он терпит неудачу, он переносится в 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:rbsgeneric BMr3ta1l  >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 голосов
/ 31 марта 2020
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) не удалась тогда» (здесь действует как «еще») )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...