Пакетная проверка наличия сетевого сетевого диска

В настоящее время я пишу script, который должен сопоставить сетевой диск с буквой Z, я использую команду net use z: \\path, дело в том, что если пользователь уже использует эту букву, я не смогу ее сопоставить, есть ли способ проверить существование этого диска (z), и если он существует для его размонтирования и монтирования на другую букву и по-прежнему использовать диск Z, который мне нужен для моего script, это часть установки, и она должна быть на диске Z.

Ответ 1

Вы можете проверить, установлен ли накопитель на IF EXIST Z:\. Это должно работать:

if exist z:\ (
    net use z: /delete
)
net use z: \\path

Ответ 2

Я использую следующий скриптовый бит для распаковки всех дисков:

:: First unmap all network drives
FOR /F "tokens=1,2,3" %%G IN ('net use^| Find "\\"') DO (
  ECHO.Unmapping %%I from drive letter %%H
  NET USE %%H /D > NUL
)

Что он делает? Пусть разделить это на

FOR/F "tokens = 1,2,3" %% G IN() DO() → будет перебирать множество, определенное между() и первым, вторым и третьим словом (любые пробелы используются как разделитель) станут доступными как %% G, %% H и %% я соответственно.

('...') выполнит команду... и передаст результат в цикл FOR

net use выведет что-то вроде этого:

New connections will be remembered.


Status       Local     Remote                    Network

-------------------------------------------------------------------------------
OK           M:        \\diskstation\music       Microsoft Windows Network
OK           P:        \\diskstation\home        Microsoft Windows Network
OK           V:        \\diskstation\video       Microsoft Windows Network
OK           X:        \\diskstation\photo       Microsoft Windows Network
The command completed successfully.

Затем этот вывод передается в Find.exe(окна, эквивалентные grep), который ищет "\\".

Символ трубы | выполняется с помощью ^, поэтому cmd не выполняет его напрямую. Выход будет следующим:

OK           M:        \\diskstation\music       Microsoft Windows Network
OK           P:        \\diskstation\home        Microsoft Windows Network
OK           V:        \\diskstation\video       Microsoft Windows Network
OK           X:        \\diskstation\photo       Microsoft Windows Network

NET USE/D удалит сопоставление дисков для выбранного отображения

Ответ 3

Другим возможным способом может быть:

net use Z:
if %errorlevel% EQU 0 net use Z: /delete
net use Z: \\path

Ответ 4

Чтобы ответить на исходный вопрос, вы можете проверить, что Z уже сопоставлен, а затем повторно отобразить его на другую букву диска (например, y:), а затем сопоставить z с новым путем.

if exist z:\ (
    for /F "tokens=1,2*" %%G in ('net use^|Find "\\"^|Find /I "z:"')  do ( net use y: %%H )
    net use z: /delete
)
net use z: \\path