web-dev-qa-db-fra.com

Vérification par lots si le lecteur réseau mappé existe

J'écris actuellement un script qui doit mapper un lecteur réseau sur la lettre Z, j'utilise la commande Net Use z: \\path, le fait est que si l'utilisateur utilise déjà cette lettre, je ne pourrai pas le mapper. , y at-il un moyen de vérifier l’existence de ce lecteur (z) et s’il existe pour le démonter et le monter sur une lettre différente tout en utilisant le lecteur z dont j’ai besoin pour mon script, c’est une partie de et il devrait être sur le lecteur Z.

17
user3502786

Vous pouvez vérifier si le lecteur est monté par IF EXIST Z:\. Cela devrait fonctionner:

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

Une autre façon possible pourrait être:

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

J'utilise le script suivant pour annuler le mappage de tous les lecteurs:

:: 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
)

Qu'est ce que ça fait? Séparons cela

FOR/F "jetons = 1,2,3" %% G IN () DO () -> itérera sur l'ensemble défini entre () et les premier, deuxième et troisième mots (tout espace blanc est utilisé comme séparateur) deviennent disponibles en tant que %% G, %% H et %% I respectivement.

('...') lancera une commande ... et transmettra le résultat à la boucle FOR

Net Use produira quelque chose comme ceci:

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.

Cette sortie est ensuite redirigée vers Find.exe (l’équivalent Windows de grep) qui recherche "\\". 

Le symbole de la pipe | est échappé en utilisant ^ donc cmd ne l'exécute pas directement. La sortie sera alors:

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 supprimera le mappage de lecteur pour le mappage sélectionné

3
MMusterd

En batch, vous pouvez écrire le code comme ceci:

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

s'il existe, V:\ ne fonctionne pas sous Windows 10, Net Use affiche également des informations supplémentaires. Je l'ai maintenant supprimé à l'aide de >nul 2>&1.

0
TarmoPikaro

Pour répondre à la question initiale, vous pouvez vérifier si Z est déjà mappé, puis le mapper sur une lettre de lecteur différente (par exemple, y :), puis mapper z sur le nouveau chemin. 

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