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
risposta
È 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
Un altro modo possibile potrebbe essere:
net use Z:
if %errorlevel% EQU 0 net use Z: /delete
net use Z: \\path
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
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
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
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
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