it-swarm.com.ru

Пакетная проверка, если подключенный сетевой диск существует

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

17
user3502786

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

if exist z:\ (
    Net Use z: /delete
)
Net Use z: \\path
29
MichaelS

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

Net Use Z:
if %errorlevel% EQU 0 Net Use Z: /delete
Net Use Z: \\path
4
sactiw

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

:: 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 и %% 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.

Этот вывод затем передается в 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
MMusterd

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

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

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

0
TarmoPikaro

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