Comment exécuter un fichier de commandes à partir d'un partage réseau sans le message «Le chemin UNC n'est pas pris en charge»?

87

J'essaie d'exécuter un fichier de commandes à partir d'un partage réseau, mais je continue à recevoir le message suivant: "Le chemin UNC n'est pas pris en charge. La valeur par défaut dans le répertoire Windows." Le fichier de commandes se trouve sur \\Server\Soft\WPX5\install.bat. En étant connecté en tant qu'administrateur, à partir de mon bureau Windows 7, je navigue \\Server\Soft\WP15\et double-clique sur install.bat, c'est à ce moment que j'obtiens le "chemin UNC non pris en charge". message. J'ai trouvé quelques suggestions en ligne indiquant que le lecteur de cartographie ne fonctionnera pas, mais que l'utilisation d'un lien symbolique résoudra ce problème, mais le lien symbolique n'a pas fonctionné pour moi. Ci-dessous le contenu de mon fichier de commandes, j'apprécierais toute aide pouvant m'aider à accomplir ce que j'essaie de faire. Fondamentalement, je veux pouvoir exécuter le fichier de commandes à partir de \\Server\Soft\WP15\install.bat.

Contenu du fichier 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

De plus, comment supprimer le lien symbolique une fois l'installation terminée?

Ragoût
la source
2
Des années plus tard, mais peut-être utile à quelqu'un d'autre: après avoir créé le lien symbolique, pourquoi continuez-vous à vous référer au chemin d'origine? Le but du lien symbolique est de vous donner un chemin local que vous pouvez utiliser à la place. Par exemple, ne dites pas "\\ serveur \ soft \ WP15 \ setup.exe", dites "% userprofile% \ Desktop \ WP15 \ setup.exe
ToolmakerSteve
sérieusement, c'est une question ServerFault.com
Junchen Liu

Réponses:

137

PUSHD et POPD devraient vous aider dans votre cas.

@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

Tapez à PUSHD /?partir de la ligne de commande pour plus d'informations.

Dbenham
la source
2
Merci pour les réponses et suggestions rapides. J'espérais que votre suggestion fonctionnerait, mais malheureusement, cela n'a pas fonctionné pour moi. J'ai eu le même message: "... les chemins UNC ne sont pas pris en charge. Par défaut dans le répertoire Windows." J'ai également eu la boîte de dialogue Contrôle de compte d'utilisateur pour cliquer sur Oui ou Non, même si j'ai exécuté le fichier en étant connecté en tant que membre du groupe d'administrateurs.
Ragoût du
26
@Stew Au début de votre fichier .bat, mettez: pushd %~dp0Cela devrait lui permettre de changer le répertoire pour celui contenant votre fichier bat. Il imprimera toujours l'avertissement, mais il devrait alors fonctionner comme d'habitude. Si le fichier bat utilise '% ~ dp0' ailleurs, il peut avoir des problèmes avec cela, dans ce cas, vous pouvez détecter si %~dp0commence par '//' au début du fichier bat, et si c'est le cas pushd, puis exécutez le bat à nouveau, alors goto :EOF. Cela entraînera son exécution dans le répertoire nouvellement mappé.
Grant Peters
la cmd sera-t-elle exécutée sur l'ordinateur distant ou local?
Dingxin Xu
@DingxinXu - Le code distant s'exécutera localement. Si vous souhaitez exécuter le code sur l'ordinateur distant, vous avez besoin de quelque chose comme PsExec .
dbenham
3
@balki - Oui, placez les commandes distantes dans un autre script. Ensuite PUSHD, exécutez le 2ème script via CMD /C, et suivez-le avec POPD. Le contrôle retournera au script parent une fois le CMD /Cscript terminé, même s'il a été arrêté par CTRL-C.
dbenham
29

Il existe un paramètre de registre pour éviter cette vérification de sécurité (utilisez-le à vos risques et périls):

Sous le chemin du registre

         Processeur    HKEY_CURRENT_USER
     \ Software
       \ Microsoft
\ Command

ajoutez la valeur DisableUNCCheck REG_DWORD et définissez la valeur sur 0 x 1 (Hex).

Remarque: sur Windows 10 version 1803, le paramètre semble se trouver sous HKLM: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor

Vinzz
la source
1
Je ne sais pas pourquoi mais j'ai trouvé mon dossier "Command Processor" sous le chemin suivant: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor
aoh
Merci, c'est utile. Mais sur Windows 10 1803, il s'agit du processeur HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command, comme l'a souligné @aoh.
Edwin Yip
Je mettrai à jour la réponse alors; merci pour la précision
Vinzz
26

Je pense que clsc'est la meilleure réponse. Il masque le message UNC avant que quiconque puisse le voir. Je l'ai combiné avec un @pushd %~dp0juste après pour qu'il semble ouvrir le script et mapper l'emplacement en une seule étape, évitant ainsi d'autres problèmes UNC.

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

Remarques:

pushd changera votre répertoire de travail à l'emplacement des scripts dans le nouveau lecteur mappé.

popd à la fin, pour nettoyer le lecteur mappé.

Grallen
la source
4
J'avais besoin popdde la fin (Windows 7), sinon les lecteurs mappés restaient bloqués après la fermeture de la fenêtre.
Patrick
1
Fonctionne très bien. Merci.
Jonas_Hess
1
Cela devrait fonctionner sur Windows 10. Il s'agit toujours de "l'invite de commande".
Grallen
11

Fondamentalement, vous ne pouvez pas l'exécuter à partir d'un chemin UNC sans voir ce message.

Ce que je fais habituellement, c'est simplement mettre un CLSen haut du script pour ne pas avoir à voir ce message. Ensuite, spécifiez le chemin d'accès complet aux fichiers du partage réseau que vous devez utiliser.

aphorie
la source
1
Merci. J'essaierai ceci comme dernière option, s'il n'y a pas d'autre solution.
Ragoût du
La réponse @jameslr fonctionnera, mais c'est plus de travail (dactylographie) que je ne suis généralement disposé à faire. Donc, simplement effacer l'écran pour se débarrasser de l'erreur est assez bon pour moi. :)
aphoria
8

J'avais besoin de pouvoir simplement parcourir l'explorateur Windows dans le partage de serveur, puis double-cliquez sur lancer le fichier de commandes. @dbenham m'a conduit à une solution plus simple pour mon scénario (sans les popdsoucis):

:: 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
JayRO-GreyBeard
la source
@ peter-mortensen, a édité les commentaires dans le script 4x pour mettre en majuscule le premier mot? Digne d'une modification? Pourquoi ne pas mettre un point à la fin pour en faire une phrase? Que diriez-vous: parce que c'est juste un commentaire, je n'utilise pas intentionnellement des majuscules dans le premier mot des commentaires, SAUF dans les appréciations et les variables (ou l'accentuation) pour une compréhension plus claire.
JayRO-GreyBeard
4

Au lieu de lancer le lot directement depuis l'explorateur - créez un raccourci vers le lot et définissez le répertoire de départ dans les propriétés du raccourci sur un chemin local tel que% TEMP% ou quelque chose.

Pour supprimer le lien symbolique, utilisez la commande rmdir.

jameslr
la source
1
Cela fonctionnera, mais uniquement si vous souhaitez lancer à partir d'un raccourci. Cela ne vous aidera pas si vous souhaitez exécuter à partir d'une ligne de commande ou appeler à partir d'un autre fichier de commandes.
aphoria le
2
Si vous souhaitez appeler à partir d'un autre lot ou d'une autre ligne de commande, vous pouvez appeler comme ceci: start / d% TEMP% \\ Server \ Soft \ WP15 \ install.bat
jameslr
2

J'ai récemment rencontré le même problème en travaillant avec un fichier de commandes sur un lecteur de partage réseau sous Windows 7.

Une autre façon qui a fonctionné pour moi était de mapper le serveur sur un lecteur via l'Explorateur Windows: Outils -> Mapper le lecteur réseau. Donnez-lui une lettre de lecteur et un chemin de dossier vers \ yourserver. Étant donné que je travaille avec le partage réseau, le mappage le rend plus pratique et a résolu l'erreur «Les chemins UNC ne sont pas pris en charge».

Kai
la source
2

Ma situation est juste un peu différente. J'exécute un fichier batch au démarrage pour distribuer la dernière version des applications métier internes.

Dans cette situation, j'utilise la clé d'exécution du registre Windows avec la chaîne suivante

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

Cela exécute deux commandes au démarrage dans le bon ordre. Copiez d'abord le fichier de commandes localement dans un répertoire sur lequel l'utilisateur est autorisé. Puis exécutez le même fichier batch. Je peux créer un répertoire local c: \ InternalApps et copier tous les fichiers du réseau.

C'est probablement trop tard pour résoudre la question de l'affiche originale, mais cela peut aider quelqu'un d'autre.

James
la source
1

Voici la RegKey que j'ai utilisée:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"DisableUNCCheck"=dword:00000001
FreeSoftwareServers
la source
0

Ma version env windows10 2019 lts et j'ajoute ces deux données binray, corrige cette erreur

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command ProcessorDésactiver UNCC Vérifier la valeur 1 Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Command Processor Désactiver UNCC Vérifier la valeur 1

Zhui Wang
la source
0

C'est un fil très ancien, mais j'utilise toujours Windows 7. :-)

Il y a un point que personne ne semble avoir pris en compte, ce qui aiderait probablement les utilisateurs de Windows 10 également.

Si les extensions de commande sont activées, la commande PUSHD accepte les chemins réseau en plus de la lettre de lecteur et du chemin normaux.

La réponse la plus évidente - et la plus simple - pourrait donc être d'activer les extensions de commande dans le script batch, si vous avez l'intention d'utiliser PUSHD. À tout le moins, cela devrait réduire les problèmes que vous pourriez rencontrer lors de l'utilisation de PUSHD avec un chemin réseau.

Ed999
la source
-1

La modification des registres Windows n'en vaut pas la peine et n'est pas sûre, utilisez Map network driveet chargez le partage réseau comme s'il était chargé depuis l'un de vos lecteurs locaux.

entrez la description de l'image ici

Adham Sabry
la source
1
En quoi est-ce différent de la réponse de Kai ?
SomethingDark
Je ne l'ai pas remarqué, peut-être que les captures d'écran valent mille mots qui font la différence?
Adham Sabry