Come eseguire il file batch dalla condivisione di rete senza il messaggio "percorso UNC non supportato"?


88

Sto tentando di eseguire un file batch da una condivisione di rete, ma continuo a ricevere il seguente messaggio: "Il percorso UNC non è supportato. Impostazione predefinita nella directory di Windows". Il file batch si trova in \\Server\Soft\WPX5\install.bat. Dopo aver effettuato l'accesso come amministratore, dal desktop di Windows 7, navigo \\Server\Soft\WP15\e faccio doppio clic su install.bat, in quel momento ottengo il "percorso UNC non supportato". Messaggio. Ho trovato alcuni suggerimenti online che affermano che l'unità di mappatura non funzionerà, ma l'utilizzo di un collegamento simbolico risolverà questo problema, ma il collegamento simbolico non ha funzionato per me. Di seguito è riportato il contenuto del file batch, apprezzerei qualsiasi assistenza che possa aiutarmi a realizzare ciò che sto cercando di fare. Fondamentalmente, voglio essere in grado di eseguire il file batch da \\Server\Soft\WP15\install.bat.

Contenuto del file batch

mklink /d %userprofile%\Desktop\WP15 \\server\soft\WP15
\\server\soft\WP15\setup.exe
robocopy.exe "\\server\soft\WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s \\server\soft\WPX5\Custom\Migrate.reg

Inoltre, come rimuovo il collegamento simbolico al termine dell'installazione?


2
Anni dopo, ma forse utile a qualcun altro: dopo aver creato il collegamento simbolico, perché continui a fare riferimento al percorso originale? Lo scopo del collegamento simbolico è darti un percorso locale che puoi usare invece. Ad esempio, non dire "\\ server \ soft \ WP15 \ setup.exe", dì "% userprofile% \ Desktop \ WP15 \ setup.exe
ToolmakerSteve

seriamente questa è una domanda di ServerFault.com
Junchen Liu

Risposte:


137

PUSHD e POPD dovrebbero aiutare nel tuo caso.

@echo off
:: Create a temporary drive letter mapped to your UNC root location
:: and effectively CD to that location
pushd \\server\soft

:: Do your work
WP15\setup.exe
robocopy.exe "WP15\Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s WPX5\Custom\Migrate.reg

:: Remove the temporary drive letter and return to your original location
popd

Digitare PUSHD /?dalla riga di comando per ulteriori informazioni.


2
Grazie per le risposte rapide e i suggerimenti. Speravo che il tuo suggerimento funzionasse, ma sfortunatamente non ha funzionato per me. Ho ricevuto lo stesso messaggio: "... i percorsi UNC non sono supportati. Impostazione predefinita per la directory di Windows." Ho anche fatto clic sulla finestra di dialogo Controllo dell'account utente su Sì o No, anche se ho eseguito il file mentre ero connesso come membro del gruppo di amministratori.
Stufato

26
@Stew All'inizio del tuo file .bat, metti: pushd %~dp0Questo dovrebbe far cambiare la directory a quella contenente il tuo file bat. Continuerà a stampare l'avviso, ma dovrebbe funzionare come al solito. Se il file bat usa '% ~ dp0' altrove, potrebbe avere problemi con quello, in tal caso, puoi rilevare se %~dp0inizia con '//' all'inizio del file bat, e in tal caso pushd, e quindi eseguire il bat di nuovo, quindi goto :EOF. Questo farà sì che venga eseguito nella directory appena mappata.
Grant Peters

il cmd verrà eseguito sul computer remoto o locale?
Dingxin Xu

@DingxinXu - Il codice remoto verrà eseguito localmente. Se vuoi eseguire il codice sul computer remoto, allora hai bisogno di qualcosa come PsExec .
dbenham

3
@balki - Sì, inserisci i comandi remoti in un altro script. Successivamente PUSHD, esegui il secondo script tramite CMD /Ce seguilo con POPD. Il controllo tornerà allo script principale dopo la chiusura dello CMD /Cscript, anche se è stato terminato da CTRL-C.
dbenham

29

C'è un'impostazione del registro per evitare questo controllo di sicurezza (usalo a tuo rischio, però):

Sotto il percorso del registro

   HKEY_CURRENT_USER
     \ Software
       \ Microsoft
         \ Command Processor

aggiungere il valore DisableUNCCheck REG_DWORD e impostare il valore su 0 x 1 (Hex).

Nota: in Windows 10 versione 1803, l'impostazione sembra essere situata in HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor


1
Non so perché, ma ho trovato la mia cartella "Command Processor" nel seguente percorso: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh

Grazie, è utile. Ma su Windows 10 1803, è HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor, come ha sottolineato @aoh.
Edwin Yip

Aggiornerò quindi la risposta; grazie per la precisione
Vinzz

26

Credo clssia la migliore risposta. Nasconde il messaggio UNC prima che chiunque possa vederlo. L'ho combinato con un @pushd %~dp0subito dopo in modo che sembrasse aprire lo script e mappare la posizione in un unico passaggio, prevenendo così ulteriori problemi di UNC.

cls
@pushd %~dp0
:::::::::::::::::::
:: your script code here
:::::::::::::::::::
@popd

Appunti:

pushd cambierà la tua directory di lavoro nella posizione degli script nella nuova unità mappata.

popd alla fine, per ripulire l'unità mappata.


4
Avevo bisogno popddi alla fine (Windows 7), altrimenti le unità mappate si bloccavano dopo la chiusura della finestra.
Patrick

1
Funziona benissimo. Grazie.
Jonas_Hess

1
Se dovrebbe funzionare su Windows 10. È ancora il "Prompt dei comandi".
Grallen

11

Fondamentalmente, non puoi eseguirlo da un percorso UNC senza vedere quel messaggio.

Quello che faccio di solito è semplicemente mettere un CLSall'inizio dello script in modo da non dover vedere quel messaggio. Quindi, specificare il percorso completo dei file nella condivisione di rete che è necessario utilizzare.


1
Grazie. Proverò questa come ultima opzione, se non ci sono altre soluzioni.
Spezzatino

La risposta di @jameslr funzionerà, ma è più lavoro (digitazione) di quanto sono disposto a fare di solito. Quindi, cancellare lo schermo per eliminare l'errore è abbastanza buono per me. :)
aphoria

8

Dovevo essere in grado di navigare solo in Esplora risorse attraverso la condivisione del server, quindi fare doppio clic su avviare il file batch. @dbenham mi ha portato a una soluzione più semplice per il mio scenario (senza popdpreoccupazioni):

:: Capture UNC or mapped-drive path script was launched from
set NetPath=%~dp0

:: Assumes that setup.exe is in the same UNC path
%NetPath%setup.exe

:: Note that NetPath has a trailing backslash ("\")
robocopy.exe "%NetPath%Custom" /copyall "C:\Program Files (x86)\WP\Custom Templates"
Regedit.exe /s %NetPath%..\WPX5\Custom\Migrate.reg

:: I am not sure if WPX5 was typo, so use ".." for parent directory
set NetPath=
pause

@ peter-mortensen, hai modificato i commenti nella sceneggiatura 4x in maiuscolo per la prima parola? Degno di una modifica? Perché non mettere un punto alla fine per renderlo una frase? Che ne dici: poiché è solo un commento, NON uso intenzionalmente le maiuscole nella prima parola nei commenti TRANNE in abbreviazioni e variabili (o enfasi) per una comprensione più chiara.
JayRO-GreyBeard,

4

Invece di avviare il batch direttamente da Explorer, crea un collegamento al batch e imposta la directory di partenza nelle proprietà del collegamento su un percorso locale come% TEMP% o qualcosa del genere.

Per eliminare il collegamento simbolico, utilizzare il comando rmdir.


1
Funzionerà, ma solo se desideri eseguire l'avvio da un collegamento. Non sarà di aiuto se si desidera eseguire da una riga di comando o chiamare da un altro file batch.
aphoria

2
Se vuoi chiamare da un altro batch o riga di comando puoi chiamare in questo modo: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat
jameslr

2

Di recente ho riscontrato lo stesso problema lavorando con un file batch su un'unità di condivisione di rete in Windows 7.

Un altro modo che ha funzionato per me è stato quello di mappare il server su un'unità tramite Esplora risorse di Windows: Strumenti -> Mappa unità di rete. Dagli una lettera di unità e il percorso della cartella a \ yourserver. Dal momento che lavoro con la condivisione di rete, spesso la mappatura lo rende più conveniente e ha risolto l'errore "UNC path non supportato".


2

La mia situazione è solo leggermente diversa. Sto eseguendo un file batch all'avvio per distribuire l'ultima versione delle applicazioni aziendali interne.

In questa situazione sto utilizzando la chiave di esecuzione del registro di Windows con la seguente stringa

cmd /c copy \\serverName\SharedFolder\startup7.bat %USERPROFILE% & %USERPROFILE%\startup7.bat

Questo esegue due comandi all'avvio nella sequenza corretta. Copiare prima il file batch localmente in una directory a cui l'utente dispone dell'autorizzazione. Quindi eseguendo lo stesso file batch. Posso creare una directory locale c: \ InternalApps e copiare tutti i file dalla rete.

Probabilmente è troppo tardi per risolvere la domanda del poster originale, ma potrebbe aiutare qualcun altro.


1

Questa è la RegKey che ho usato:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001

1

Questo è un thread molto vecchio, ma uso ancora Windows 7. :-)

C'è un punto che nessuno sembra aver preso in considerazione, il che probabilmente aiuterebbe anche gli utenti di Windows 10.

Se le estensioni ai comandi sono abilitate, il comando PUSHD accetta percorsi di rete oltre alla normale lettera e percorso di unità.

Quindi la risposta ovvia e più semplice potrebbe essere abilitare le estensioni dei comandi nello script batch, se intendi utilizzare PUSHD. Per lo meno, questo dovrebbe ridurre i problemi che potresti avere nell'usare PUSHD con un percorso di rete.


0

La mia versione env windows10 2019 lts e aggiungo questi due dati binray, correggo questo errore

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorDisableUNCCheck valore 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor DisableUNCCheck valore 1


-1

La modifica dei registri di Windows non vale la pena e non è sicura, usa Map network drivee carica la condivisione di rete come se fosse caricata da una delle tue unità locali.

inserisci qui la descrizione dell'immagine


1
In che modo è diverso dalla risposta di Kai ?
SomethingDark

Non l'ho notato tbh, forse gli screenshot valgono più di mille parole che fanno la differenza?
Adham Sabry
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.