113 votes

Copier le chemin réseau UNC (pas la lettre de lecteur) pour les chemins d'accès sur les lecteurs mappés à partir de l'Explorateur Windows

Je veux souvent partager des chemins réseau Windows vers des fichiers avec mes collègues par e-mail ou chat. Nous avons beaucoup de lecteurs mappés ici, à la fois ceux que nous avons configurés nous-mêmes et ceux configurés par nos seigneurs des TI. Ce que je voudrais pouvoir faire, c'est copier le chemin réel complet (pas la lettre de lecteur) de l'Explorateur Windows pour l'envoyer aux gens.

Exemple : J'ai un fichier dans mon lecteur "Q:", \\cartman\users\emueller, et je veux envoyer un lien vers le fichier foo.doc à mes collègues. Lorsque je copie le chemin du fichier (maj+clic droit, "copier en tant que chemin"), il obtient le nom de fichier "Q:\foo.doc" dans le presse-papiers. Cela n'est pas utile pour les autres, qui devraient voir \\cartman\users\emueller\foo.doc pour pouvoir ouvrir le lien.

Dans l'Explorateur, il connaît clairement le chemin complet - dans la barre d'adresse, je vois "Ordinateur -> emueller (\\cartman\users) (Q:) ->". Y a-t-il un moyen de dire "hé mec copie ce chemin en tant que texte avec \\cartman\users\emueller et non le Q: dedans ?"

Je sais que je pourrais simplement configurer des emplacements réseau mappés au lieu des lecteurs mappés pour ceux que j'ai configurés personnellement et éviter ce problème, mais la plupart des lecteurs mappés comme le partage "users" viennent de notre politique informatique d'entreprise et ne peuvent pas être remplacés. Je pourrais simplement créer un emplacement réseau séparé et ensuite ignorer mon lecteur Q: mais c'est contraignant (et ils le font pour pouvoir déplacer des comptes entre serveurs). Bien sûr, mon chemin envoyé par e-mail pourrait finalement causer des problèmes car je perds l'indirection de la lettre de lecteur, mais cela ne me dérange pas.

1 votes

Si vous utilisez dans un environnement d'entreprise sécurisé où vous ne pouvez pas installer d'applications tierces et/ou accéder au registre, alors cette solution fonctionnera ... superuser.com/a/704374/46099

65voto

Jimbo Points 631

Peut-être un moyen plus long mais ouvrez une fenêtre cmd. Ensuite, entrez la commande net use dans n'importe quel dossier. Il renverra tous les dossiers mappés comme ci-dessous (indiqué à titre d'exemple uniquement)

P:\XX\XX>net use
Les nouvelles connexions seront mémorisées.

Statut       Local     Remote                Network
-------------------------------------------------------------------------------
OK           N:        \\server01\Test1      Réseau Microsoft Windows
OK           P:        \\server02\Test1      Réseau Microsoft Windows
OK                     \\10.8.5.99\NOTEBOOK  Réseau Microsoft Windows
OK                     \\10.8.5.99\tmp       Réseau Microsoft Windows

Si vous le souhaitez, vous pouvez envoyer la sortie ci-dessus vers un fichier par exemple P:\XX\XX>net use > drives.txt. Ensuite, ouvrez le fichier: drives.txt et vous pouvez copier le chemin à partir du fichier pour votre utilisation.

Vous pouvez également copier à partir de la fenêtre de ligne de commande elle-même.

J'espère que cela vous aidera.

12 votes

Simple et facile. Toutes les autres solutions dans le sujet sont très volumineuses...

9 votes

Ou, il suffit de sauter le " > drives.txt" et copier directement le chemin affiché dans la fenêtre du terminal.

1 votes

Simple et facile. Gagner.

62voto

i_saw_drones Points 739

J'avais exactement le même problème - tout le monde n'avait pas les mêmes lecteurs mappés que moi, ou mappés aux mêmes lettres.

Après beaucoup de recherches, j'ai trouvé une extension de menu contextuel appelée Path Copy Copy sur GitHub (https://pathcopycopy.github.io/) qui est une version étendue d'une extension similaire plus ancienne (appelée Pathcopy) qui offre plusieurs options pour copier des chemins en tant que texte, y compris une pour les chemins UNC - exemple des options disponibles ci-dessous:

Exemple de menu contextuel de copie de chemin

Vous pouvez également choisir d'afficher une ou deux lignes sur le menu contextuel de base, par exemple vous pouvez avoir deux lignes, Copier le chemin long et Copier le chemin UNC long. C'est idéal pour envoyer des emails aux utilisateurs de votre entreprise qui ont accès à un chemin réseau, et s'ils ont le même mappage réseau que vous, vous pouvez choisir le premier, sinon vous pouvez utiliser le second.

Mise à jour: À partir de la version 12.0, un nouvel "installateur portable" est disponible sur le site ci-dessus, qui s'installe uniquement pour l'utilisateur actuel dans le dossier AppData\Local. Je n'ai pas essayé cela, mais cela pourrait être une solution pour ceux qui sont empêchés d'installer normalement.

4 votes

Un peu en désordre, je préfère net use tel que suggéré par Jimbo.

46voto

Think Top Down Points 39

Geoff avait essentiellement raison, mais pour aller encore plus loin,

  1. Faites glisser avec le bouton droit de la souris le dossier depuis l'Explorateur Windows dans le corps de votre nouvel e-mail,

  2. ensuite sélectionnez 'Créer un lien hypertexte ici'.

2 votes

La plus rapide et la plus plug-and-play

5 votes

Devrait être la meilleure réponse car le problème se manifeste principalement dans un environnement d'entreprise et vous ne pouvez pas y installer de logiciel vous-même.

0 votes

Cela doit être fusionné avec la réponse de kmote superuser.com/a/454119/190599 car les deux ensemble sont super rapides.

39voto

Martin Ueding Points 480

MISE À JOUR: L'approche de CoolCol est encore plus facile que la mienne. Upvote cette réponse.

Voici le contournement que j'utilise lorsque j'envoie des chemins de réseau mappés via Outlook :

  1. Dans l'Explorateur de fichiers Windows, maintenez le bouton shift enfoncé, clic droit sur le fichier, et sélectionnez "Copier en tant que chemin".
  2. Insérez un Hyperlien dans l'email et collez dans le champ d'adresse de la boîte de dialogue Hyperlien. (Raccourci : ctrl-K ctrl-V + OK). À ce stade, le lien affichera la lettre de lecteur mappée comme la racine (Q:\foo.doc).
  3. Maintenant, clic droit et sélectionnez "Modifier le lien hypertexte..." vous remarquerez que le champ Adresse a été traduit en le chemin UNC complet (\\cartman\users\emueller\foo.doc). Avec votre souris dans le champ Adresse, appuyez sur ctrl-A et ctrl-C pour copier le chemin complet dans votre presse-papiers, puis déplacez votre curseur vers le champ supérieur ("Texte à afficher :") appuyez sur ctrl-A et ctrl-V pour l'afficher correctement dans votre email.

0 votes

Je ne vois pas les choses décrites.

0 votes

Quelle partie ne pouvez-vous pas voir? Pouvez-vous créer le lien hypertexte? Savez-vous comment modifier le lien?

3 votes

Dans l'étape 3, si vous tapez un caractère et le supprimez, cela mettra à jour le "Texte à afficher", ce qui est plus facile que de copier/coller.

21voto

Peter Neubauer Points 579

Je venais juste de ressentir le besoin de la même chose que demande OP et après avoir cherché sur Google et lu les réponses, aucun d'eux ne fournissait ce que je pense que OP et moi cherchons.

Le problème ici est que quelqu'un peut mapper un partage réseau sur Drive Y tandis que quelqu'un d'autre dans l'organisation peut avoir le même partage réseau mappeé comme Drive X; donc, envoyer un lien tel que Y:\mydirectory ne fonctionnera pour personne d'autre sauf moi.

Comme l'explique OP, l'Explorateur montre le chemin réel dans la barre de l'Explorateur, mais vous ne pouvez pas le copier (taper est fastidieux et sujet aux erreurs, donc ce n'est pas une option) même si vous choisissez copy as path dans le menu contextuel:

entrer la description de l'image ici

La solution que j'ai trouvée (en copiant le code de quelqu'un d'autre) est un petit programme en C# que vous pouvez appeler depuis un menu contextuel dans l'Explorateur et qui vous permet de traduire la lettre du lecteur mappé en le chemin UNC réel.

Voici le code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Utils
{
    //C'est la seule partie du code que j'ai écrite
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            //Prend le paramètre de la ligne de commande. Comme cela 
            //sera appelé depuis le menu contextuel, le menu contextuel 
            //le passera via %1 (voir les instructions du registre ci-dessous)
            if (args.Length == 1)
            {               
                Clipboard.SetText(Pathing.GetUNCPath(args[0]));
            }
            else
            {   
               //C'est pour que vous puissiez attribuer un raccourci au programme et pouvoir
               //l'appeler en appuyant sur le raccourci que vous avez attribué. Le programme
               //prendra la chaîne qui se trouve dans le Presse-papiers et la convertira en chemin UNC
               //Par exemple, vous pouvez "Copier comme chemin" et ensuite appuyer sur le raccourci que
               //vous avez attribué à ce programme. Ensuite, vous pouvez appuyer sur ctrl-v et il contiendra 
               //le chemin UNC
                Clipboard.SetText(Pathing.GetUNCPath(Clipboard.GetText()));           
            }
        }
    }
}

Et voici la définition de la classe Pathing (je vais essayer de trouver la source réelle car je ne me souviens pas où je l'ai trouvée):

public static class Pathing
{
    [DllImport("mpr.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    public static extern int WNetGetConnection(
        [MarshalAs(UnmanagedType.LPTStr)] string localName,
        [MarshalAs(UnmanagedType.LPTStr)] StringBuilder remoteName,
        ref int length);
    /// 
    /// Étant donné un chemin, retourne le chemin UNC ou l'original. (Aucune exception
    /// n'est levée par cette fonction directement). Par exemple, "P:\2008-02-29"
    /// pourrait renvoyer: "\\serveurduréseau\Partages\Photos\2008-02-09"
    /// 
    /// Le chemin à convertir en un chemin UNC
    /// Un chemin UNC. Si une lettre de lecteur réseau est spécifiée, la
    /// lettre de lecteur est convertie en un chemin UNC ou réseau. Si le
    /// originalPath ne peut pas être converti, il est renvoyé inchangé.
    public static string GetUNCPath(string originalPath)
    {
        StringBuilder sb = new StringBuilder(512);
        int size = sb.Capacity;

        // chercher la combinaison {LETTRE} :...
        if (originalPath.Length > 2 && originalPath[1] == ':')
        {
            // ne pas utiliser char.IsLetter ici - car cela peut être trompeur
            // les seules lettres de lecteur valides sont a-z && A-Z.
            char c = originalPath[0];
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
            {
                int error = WNetGetConnection(originalPath.Substring(0, 2),
                    sb, ref size);
                if (error == 0)
                {
                    DirectoryInfo dir = new DirectoryInfo(originalPath);

                    string path = Path.GetFullPath(originalPath)
                        .Substring(Path.GetPathRoot(originalPath).Length);
                    return Path.Combine(sb.ToString().TrimEnd(), path);
                }
            }
        }

        return originalPath;
    }
}

Vous compilez le programme et placez l'exécutable quelque part dans votre PC, par exemple, dans c:\Utils

Ensuite, vous ajoutez une option de menu contextuel dans l'Explorateur comme ceci:

Regedit puis:

HKEY_CLASSES_ROOT\*\Directory\Shell

Clic droit sur Shell --> Nouveau --> Clé --> Nom: "To UNC Path"
Clic droit sur To UNC Path --> Nouveau --> Clé --> Nom: command
Clic droit sur Entrée par défaut et sélectionner `Modifier`
Données de la valeur: c:\Utils\Utils.exe "%1"

Vous avez terminé. Maintenant, vous verrez cette option lorsque vous ferez un clic droit sur un répertoire depuis un lecteur mappé:

entrer la description de l'image ici

Remarque

Je peux fournir l'exécutable pour que vous n'ayez pas à le compiler vous-même. Il vous suffit de me laisser un message ici.

1 votes

Ce serait bien si vous compressiez le fichier exécutable et le placiez dans un espace public comme le dossier Dropbox Public et fournissiez un lien ici. =)

3 votes

Beaucoup de travail, je préfère beaucoup net use comme suggéré par Jimbo.

0 votes

@JonasByström Mais le résultat final est aussi agréable que possible pour la question de l'OP. Donc, ce "travail considérable" est précisément ce qui vaut à cette réponse le vote favorable, même si je ne l'utiliserai pas personnellement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X