Пакетная проверка наличия подключенного сетевого диска
В настоящее время я пишу сценарий, который должен сопоставить сетевой диск с буквой 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
.