2014-12-02 24 views
12

Attualmente sto scrivendo uno script che dovrebbe mappare un'unità di rete alla lettera Z, sto usando il comando net use z: \\path, il fatto è che se l'utente sta già utilizzando questa lettera i non sarà in grado di mapparlo, c'è un modo per controllare l'esistenza di questa unità (z) e se esiste per smontarlo e montarlo su una lettera diversa e utilizzare ancora l'unità z di cui ho bisogno per il mio script, questa è una parte di un'installazione e dovrebbe essere sull'unità Z.Verifica batch se esiste un'unità di rete mappata

+0

Inizia con 'per/F "tokens = 1,2 *" % G ('uso netto^| Trova "\\"^| Trova/I "Z:"') do @echo% H % I' per vedere un esempio. (Usando questo in uno script batch, raddoppia il segno '%', usa' %% G', '%% H' ecc.) [Ulteriori informazioni ...] (http://ss64.com/nt/for_cmd. html). Quindi puoi sostituire il semplice '@echo %% H %% I' con [comandi multipli in FOR loop] (http://ss64.com/nt/for.html). Sentiti libero di [aggiorna la tua domanda] (http://stackoverflow.com/posts/27246899/edit) con risultati concreti e chiedi di più nel caso in cui tu gestisca qualcosa. – JosefZ

+0

Perché non usare solo la prossima lettera di unità disponibile per distruggere la mappatura corrente degli utenti: 'net use * \\ path'. oppure è possibile utilizzare il comando PUSHD che mapperà la successiva lettera di unità disponibile e immediatamente eseguirà una directory di modifica su quel percorso: 'PUSHD \\ percorso' – Squashman

risposta

17

È possibile verificare se il convertitore di frequenza è montato con IF EXIST Z:\. Questo dovrebbe funzionare:

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

Utile anche:' se non esiste z: \ (net use z: \\ my \ unc \ percorso) ' – Jeroen

+0

Questo risponde solo a una parte della domanda e non risponde alla domanda completa di ri-mappatura dell'unità a una lettera diversa. – jaylweb

2

Un altro modo possibile potrebbe essere:

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

Io uso il seguente scriptbit Per eliminare la mappatura di tutte le unità:

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

Che cosa fa? Dividiamolo su

FOR/F "token = 1,2,3" %% G IN() DO() -> itererà sopra il set definito tra() e la prima, la seconda e la terza parola (qualsiasi spazio bianco è usato come separatore) diventerà disponibile come %% G, %% H e %% I rispettivamente.

('...') verrà eseguito un comando ... e passare il risultato (s) per il ciclo FOR

uso netto sarà in uscita qualcosa di simile:

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. 

Questa uscita viene quindi inviato a Find.exe (le finestre equivalenti a grep) che cerca "\\".

Simbolo pipe | è sfuggito usando^quindi cmd non lo esegue direttamente. L'uscita sarà quindi:

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 sarà eliminare il mapping di unità per la mappatura selezionata

+0

Innanzitutto, questo non fa nulla per rispondere alla domanda dei posters. In secondo luogo, si interrompe se il percorso UNC remoto è lungo e causa la visualizzazione della colonna di rete su una seconda riga. Questo script è eccessivo per l'eliminazione di tutti i mapping di unità. Un modo più semplice per rimuovere tutti i mapping di unità consiste nell'utilizzare la rete */d/y. – jaylweb

0

Per rispondere alla domanda originale, è possibile controllare se Z è già mappato e poi ri-mappa a una lettera di unità diversa (ad esempio y :), quindi mappare z al nuovo percorso.

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