net use delete в пакете, если диск существует

Я хотел бы сценарий установки, который может подключить сетевой диск, как это:

net use v: /delete || EXIT /B 1
net use v: "\\vmware-hostservername\share Folder" 

Мне нужно охватить два сценария.

  1. Запустите тест после перезагрузки ПК (нет диска v: доступно)
  2. запустить тест повторно. Диск v: уже существует и требует удаления и повторного сопоставления.

Я не могу поместить его в окно запуска, потому что есть тайм-ауты для отключения, и необходимо выполнить сопоставление перед запуском сценария, поэтому он гарантирует, что диск будет доступен (и не отключен).

Предоставленный скрипт не работает после перезагрузки ПК, поскольку v: не существует. Это нуждается в некоторой модификации как

if exists V: net use v: /delete || EXIT /B 1

Я не слишком знаком с пакетным синтаксисом вышеупомянутого psedocode.

2 ответа

Решение

Просто проверьте, существует ли сопоставление

net use v: && (net use v: /delete /Y || exit /b 1)

Выполняет net use v: показать информацию для диска. Тогда он использует оператор условного выполнения &&то есть выполнить следующую команду, если предыдущая была успешной.

Если диск существует, он просто пытается удалить отображение, и в этом случае оператор условного выполнения || (выполнить следующую команду, если предыдущая не удалась).

TL;DR:

После будет размонтировать диск I не печатая ничего на консоли и сохраняя errorlevel в 0.

net use I: /delete /Y > NUL 2>&1 || dir > NUL

Деталь:

Хотя принятый ответ правильный, но он поднимает errorlevel если диск не был установлен. Так как я хотел только проверить и размонтировать существующий диск без изменения уровня ошибки, я предложил команду выше.

net use I: /delete /Y пытается размонтировать диск I сразу же, тогда как > NUL 2>&1 перенаправляет вывод на NUL устройство (скрывая его от консоли).

Если размонтировать не удалось (монтирование не обнаружено), условное выполнение || начинается где dir > NUL печатает содержимое текущего каталога в NUL устройство (опять ничего не печатая на консоли). Это сбрасывает уровень ошибки до 0.

В итоге ничего не печатается на консоли, а уровень ошибки остается равным 0.

Другие вопросы по тегам