write simple script run print how example create commands code batch bat batch-file cmd batch-processing

batch file - simple - Comprobación por lotes si existe unidad de red asignada



create cmd script windows (5)

Actualmente estoy escribiendo un script que debe asignar una unidad de red a la letra Z , estoy usando el comando net use z: //path , lo que ocurre es que si el usuario ya está usando esta letra no podré para mapearlo, hay alguna forma de verificar la existencia de esta unidad (z) y si existe para desmontarla y montarla en una letra diferente y seguir usando la unidad z que necesito para mi script, esto es parte de una instalación, y debe estar en la unidad Z.


En lote puedes escribir código como este:

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

si existe V:/ no funciona en Windows 10, también net use muestra información adicional, ahora lo he eliminado usando >nul 2>&1 .


Otra forma posible podría ser:

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


Para responder a la pregunta original, puede verificar si Z ya está asignada y luego volver a asignarla a una letra de unidad diferente (por ejemplo, y :), luego asignar z a la nueva ruta.

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


Puede verificar si la unidad está montada por IF EXIST Z:/ . Esto debería funcionar:

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


Uso el siguiente script para desasignar todas las unidades:

:: 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é hace? Vamos a dividir esto

Las fichas FOR / F "= 1,2,3" %% G IN () DO () -> iterarán sobre el conjunto definido entre () y la primera, segunda y tercera palabra (cualquier espacio en blanco se usará como separador) estarán disponibles como %% G, %% H y %% I respectivamente.

(''...'') ejecutará un comando ... y pasará el (los) resultado (s) al bucle FOR

El uso neto producirá algo como esto:

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.

Esta salida se canaliza a Find.exe (el equivalente de Windows a grep) que busca "//".

El símbolo de la tubería | se escapa usando ^ por lo que cmd no lo ejecuta directamente. La salida será entonces:

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 eliminará la asignación de unidades para la asignación seleccionada