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

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

5 ответов


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

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

Я использую следующий scriptbit для отключения всех дисков:

:: 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 в () DO () -- > будет перебирать набор, определенный между () и первым, вторым и третьим словом (любое пробел используется в качестве разделителя), станет доступным как %%G, %%H И %%I соответственно.

('...') будет выполнять команду ... и передайте результат(ы) в цикл 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.

этот вывод передается в Найти.exe (Windows, эквивалентная 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 удалит отображение диска для выбранного отображения


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

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

чтобы ответить на исходный вопрос, вы можете проверить, сопоставлен ли 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

в пакете вы можете написать такой код:

@echo off
net use V: >nul 2>&1
if %errorlevel% equ 0 goto unmap

при наличии V:\ не работает в Windows 10, также net use отображает дополнительную информацию, теперь я подавил ее с помощью >nul 2>&1.