net use delete в пакете, если диск существует
Я хотел бы сценарий установки, который может подключить сетевой диск, как это:
net use v: /delete || EXIT /B 1
net use v: "\\vmware-hostservername\share Folder"
Мне нужно охватить два сценария.
- Запустите тест после перезагрузки ПК (нет диска v: доступно)
- запустить тест повторно. Диск 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.