Как можно получить значение ERRORLEVEL при проверке доступности сервера в файле .bat, не используя команду ping?

Как можно реализовать проверку доступности сервера, не используя команду пинга, учитывая, что пинг на сервере отключен? У меня есть bat-файл, который проверяет доступность сервера при помощи пинга, примерно следующего вида: 

```bat
@echo off
setlocal enabledelayedexpansion
ping myserver.ru /l 32 /n 4
if "!ERRORLEVEL!"=="0" (
   ...
)
```

В данный момент, если сервер отвечает на пинг, это считается положительным результатом. В противном случае следует перейти к обработке ошибки. Как можно реализовать аналогичную проверку без использования пинга?
  • 13 февраля 2025 г. 12:14
Ответы на вопрос 2
Если вам нужно проверить доступность сервера, не используя команду `ping`, вы можете использовать другие сетевые команды, такие как `telnet` или `curl`, если они установлены на вашем компьютере. 

Вот пример, как вы можете использовать `telnet` для проверки доступности порта сервера (например, порт 80 для HTTP):

```bat
@echo off
setlocal enabledelayedexpansion

set "server=myserver.ru"
set "port=80"

rem Проверяем доступность сервера на указанном порту
(
    echo quit
) | telnet %server% %port% >nul 2>&1

rem Проверяем значение ERRORLEVEL
if !ERRORLEVEL! == 0 (
    echo Сервер доступен
) else (
    echo Сервер недоступен
)
```

### Описание:
1. Используется команда `telnet` для подключения к указанному серверу и порту.
2. `echo quit` отправляется через стандартный ввод, чтобы закрыть соединение после успешного подключения.
3. Результат выполнения команды перенаправляется в `nul`, чтобы скрыть его вывод.
4. Далее проверяется значение `ERRORLEVEL`. Если `ERRORLEVEL` равен `0`, это означает, что соединение успешно, и сервер доступен. В противном случае сервер считается недоступным.

### Примечание:
- Убедитесь, что на вашем компьютере установлена утилита `telnet`. В некоторых версиях Windows она может быть отключена по умолчанию.
- Если вам нужно проверить другой порт (например, FTP на порту 21 или HTTPS на порту 443), просто измените значение переменной `port` на соответствующий номер. 

Альтернативно вы можете использовать `curl`, если он установлен на вашем компьютере:

```bat
@echo off
setlocal enabledelayedexpansion

set "server=myserver.ru"
set "url=http://%server%"

curl -s --head %url% >nul
if !ERRORLEVEL! == 0 (
    echo Сервер доступен
) else (
    echo Сервер недоступен
)
```

В этом случае команда `curl` делает HEAD-запрос к серверу, и если сервер отвечает, это будет означать, что он доступен.
Можно использовать что-то вроде 
@echo off
setlocal enabledelayedexpansion

:: Проверяем доступность порта 80 через TCP
powershell -noprofile -command "$tcp = New-Object System.Net.Sockets.TcpClient; $result = $tcp.ConnectAsync('myserver.ru', 80).Wait(1000); if ($tcp.Connected) { exit 0 } else { exit 1 }"

if "!ERRORLEVEL!"=="0" (
    echo Сервер доступен.
) else (
    echo Сервер недоступен.
    goto error_handling
)

 ... остальной код ...

:error_handling
:: Обработка ошибки
Похожие вопросы