Если оператор не выполняется должным образом - командный файл - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь установить агент RMM на большое количество клиентских компьютеров, к которым у нас есть доступ через ConnectWise ScreenConnect. Я написал пакет (cmd), чтобы упростить процесс загрузки и установки при установке без вывода сообщений.

Однако я столкнулся с проблемой получения строк if для прослушивания для строк.

Я попытался изменить символ после do, я попытался изменить == на EQU и отключил кавычки для скобок и т. Д. Безрезультатно.


:check
for /f "tokens=1-3" %%i in ('cmd bitsadmin /list ^| findstr syncroMSP') do (
    if "%%k"=="SUSPENDED" (
        echo Status is [%%k]
        goto success
    ) else (
        goto fail
    )
)

:success
explorer
echo If you had a suspended transfer, your script worked.
pause
exit /b

:fail
calc
your If you didn't have any suspended transfers, your script worked.
pause
exit /b

При отсутствии активных заданий на перенос я ожидаю увидеть выполнение команды "else" и, в конце концов, открою калькулятор (для меня это простой способ увидеть, как оно работает). Вместо этого я вижу «Status is [%% k]», за которым следует открытие проводника.

РЕДАКТИРОВАТЬ: Этим утром после запуска точно такого же пакета я получаю пустое окно cmd с тикающим блоком курсора ...

1 Ответ

1 голос
/ 16 мая 2019

, если bitsadmin /list | findstr syncroMSP ничего не возвращает, цикл for вообще не выполняется, и из-за вашей логики следующий исполняемый код - это код под меткой :success.

Пропустите часть else и немного измените логику:

:check
for /f "tokens=1-3" %%i in ('bitsadmin /list ^| findstr syncroMSP') do (
    if "%%k"=="SUSPENDED" (
        echo Status is [%%k]
        goto success
    )
)

calc
your If you didn't have any suspended transfers, your script worked.
pause
exit /b

:success
explorer
echo If you had a suspended transfer, your script worked.
pause
exit /b

или даже лучше, полностью измените свою логику:

:check
set status=unknown
for /f "tokens=1-3" %%i in ('bitsadmin /list ^| findstr syncroMSP') do set "status=%%k"
echo Status is [%status%]
if "%status%" == "SUSPENDED" (
  explorer
  echo your script worked
  pause
  exit /b
)
calc
echo no suspended transfer
pause
exit /b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...