Copie o caminho de rede UNC (não a letra da unidade) para caminhos em unidades mapeadas do Windows Explorer


87

Frequentemente, quero compartilhar caminhos de rede do Windows para arquivos com outras pessoas da minha equipe por e-mail ou bate-papo. Temos muitas unidades mapeadas aqui, tanto as que montamos como as montadas por nossos chefes de TI. O que eu gostaria de fazer é copiar o caminho real completo (e não a letra da unidade) do Windows Explorer para enviar para o pessoal.

Exemplo: eu tenho um arquivo na minha unidade "Q:", \\ cartman \ users \ emueller, e quero enviar um link para o arquivo foo.doc para os colegas de trabalho. Quando copio o caminho do arquivo (shift + clique com o botão direito do mouse, "copiar como caminho"), ele obtém o nome do arquivo "Q: \ foo.doc" na área de transferência. Isso é inútil para outras pessoas, que precisariam ver \\ cartman \ users \ emueller \ foo.doc para poder consumir o link.

No Explorer, ele conhece claramente o caminho completo - na barra de endereços, vejo "Computador -> emueller (\\ cartman \ users) (Q :) ->". Existe uma maneira de dizer "ei cara, copie esse caminho como texto com o \\ cartman \ users \ emueller e não o Q: nele?"

Eu sei que eu poderia apenas configurar locais de rede mapeados em vez das unidades mapeadas para as que eu configurei pessoalmente e evitar esse problema, mas a maioria das unidades mapeadas, como o compartilhamento "users", vem da nossa política corporativa de TI e não pode ser substituído. Eu poderia apenas criar um local de rede separado e depois ignorar minha unidade Q: mas isso é inconveniente (e eles fazem isso para que possam mover contas entre servidores). Claro que meu caminho por e-mail pode eventualmente quebrar, porque estou perdendo a letra da unidade, mas tudo bem comigo.


1
Se você estiver executando em um ambiente corporativo bloqueado em que não possa instalar aplicativos de terceiros e / ou acessar o registro, esta solução funcionará ... superuser.com/a/704374/46099
Richard

Respostas:


46

Eu tinha exatamente o mesmo problema - nem todos tinham as mesmas unidades mapeadas que eu ou mapeadas para as mesmas letras.

Após muita pesquisa, encontrei uma extensão de menu de contexto chamada Path Copy Copy no GitHub ( https://pathcopycopy.github.io/ ), que é uma versão estendida de uma extensão semelhante e antiga (chamada Pathcopy), com muitas opções para copiar caminhos. como texto, incluindo um para caminhos UNC - exemplo das opções disponíveis são mostrados abaixo:

Exemplo de menu de contexto de cópia de caminho

Você também pode optar por mostrar apenas uma ou duas linhas no menu de contexto base. Por exemplo, você pode ter duas linhas, Copiar caminho longo e Copiar caminho UNC longo. É ótimo para enviar e-mails a usuários da sua empresa que tenham acesso a um caminho de rede e, se eles tiverem o mesmo mapeamento de rede que você, você poderá escolher o primeiro, caso contrário, poderá usá-lo.

Atualização : A partir da versão 12.0, um novo instalador "portátil" está disponível no site acima, que é instalado apenas para o usuário atual na AppData\Localpasta. Eu não tentei isso, mas poderia ser uma solução para aqueles que estão proibidos de instalar normalmente.


4
Um pouco bagunçado, eu prefiro o uso da rede, como sugerido por Jimbo.
Jonas Byström

49

Talvez um longo caminho, mas abra uma janela de cmd. Então façanet use > filename

Em seguida, abra o nome do arquivo e você poderá obter o caminho:
Ex:

C:\Users\me\net use > drives.txt

Abertura drives.txt

New connections will be remembered.
Status       Local     Remote                    Network
-------------------------------------------------------------------------------
             H:        \\server\c\proj\net       Microsoft Windows Network

Pode copiar \\server\c\prog\netdo arquivo para seu uso.

Espero que isto ajude.


10
simples e fácil. Todas as outras soluções no tópico são muito grosso ...
radistao

8
Ou simplesmente pule o "> drives.txt" e copie o caminho gerado diretamente da janela do terminal.
darenw

1
Simples e fácil. Ganhar.
CAD bloke

Com o msysgit / bash na ponta dos dedos, isso é muito mais fácil do que as outras soluções. Grande!
Jonas Byström

1
net use > filename me confundiu .. e eu usei meu nome de arquivo pdf real naquele local, assim, derrotou meu arquivo pdf original. Sim, eu sei que é ruim. então tome cuidado. basta usar net usee copiar da janela do terminal. e se você realmente precisa dentro de um arquivo .. então você sabe o que fazer .. `> uncpathnamefile.txt '
ihightower

38

ATUALIZAÇÃO: A abordagem da CoolCol é ainda mais fácil que a minha. Voto positivo nessa resposta.

Aqui está a solução alternativa que uso ao enviar caminhos de rede mapeada via Outlook:

  1. No Windows Explorer, mantenha o shiftbotão pressionado, clique novamente no arquivo e selecione " Copiar como caminho ".
  2. Insira um Hyperlink no email e cole no campo de endereço da caixa de diálogo Hyperlink. (Atalho: ctrl-K ctrl-V+ OK). Nesse ponto, o link exibirá a letra da unidade mapeada como raiz ( Q:\foo.doc).
  3. Agora, clique com o botão direito do mouse e selecione " Editar hiperlink ... ". Você perceberá que o campo Endereço foi convertido novamente no caminho UNC completo ( \\cartman\users\emueller\foo.doc). Com o mouse no campo Endereço, pressione ctrl-Ae ctrl-Cpara copiar o caminho completo para a área de transferência, mova o cursor para o campo superior ("Texto a ser exibido :") ctrl-Ae ctrl-Vpara exibi-lo corretamente em seu e-mail.

Não vejo as coisas descritas.
precisa saber é o seguinte

qual parte você não pode ver? Você pode criar o hiperlink? Você sabe como editar o link?
kmote '

3
Na etapa 3. se você digitar um caractere e excluí-lo, ele atualizará o "Texto a ser exibido", mais fácil do que copiar / colar.
79E09796

Você não precisa digitar um caractere no "Texto a ser exibido" e excluí-lo, apenas exclua-o.
Bae

1
Consulte a resposta da Coolcol em superuser.com/a/922152/190599 para acelerar a cópia clicando com o botão direito do mouse na opção "Criar atalho aqui".
Bae

29

Geoff estava basicamente no local, mas para dar um passo adiante,

  1. ARRASTE À DIREITA a pasta do Windows Explorer, no corpo do seu novo email,
  2. depois selecione 'Criar hiperlink aqui' .

1
mais rápida e mais fora da caixa-est
Alex

3
Deve ser a melhor resposta, pois o problema aparece principalmente no ambiente corporativo e você também não pode instalar o software.
precisa

Isso precisa ser mesclado com a resposta de kmote superuser.com/a/454119/190599 como os dois juntos são super rápida
Bae

19

Eu só precisava da mesma coisa que o OP pergunta e, depois de pesquisar no Google e ler as respostas, nenhum deles forneceu o que eu acho que o OP e eu estamos procurando.

O problema aqui é que é possível mapear um compartilhamento de rede, Drive Yenquanto outra pessoa na organização pode ter o mesmo compartilhamento de rede mapeado Drive X; portanto, enviar um link como o que Y:\mydirectorypode não funcionar para mais ninguém, exceto eu.

Como o OP explica, o Explorer mostra o caminho real na barra do Explorer, mas você não pode copiá-lo (a digitação é tediosa e propensa a erros, portanto não é uma opção), mesmo se você escolher copy as pathno menu de contexto:

insira a descrição da imagem aqui

Portanto, a solução que eu encontrei (copiando o código de outra pessoa) era um pequeno programa C # que você pode chamar de um menu de contexto no Explorer e permitirá traduzir a letra da unidade mapeada para a real UNC path.

Aqui está o código:

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

namespace Utils
{
    //This is the only piece of code I wrote
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            //Takes the parameter from the command line. Since this will
            //be called from the context menu, the context menu will pass it 
            //via %1 (see registry instructions below)
            if (args.Length == 1)
            {               
                Clipboard.SetText(Pathing.GetUNCPath(args[0]));
            }
            else
            {   
               //This is so you can assign a shortcut to the program and be able to
               //Call it pressing the shortcut you assign. The program will take
               //whatever string is in the Clipboard and convert it to the UNC path
               //For example, you can do "Copy as Path" and then press the shortcut you  
               //assigned to this program. You can then press ctrl-v and it will
               //contain the UNC path
                Clipboard.SetText(Pathing.GetUNCPath(Clipboard.GetText()));           
            }
        }
    }
}

E aqui está a Pathingdefinição de classe (tentarei encontrar a fonte real, pois não me lembro onde a encontrei):

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);
    /// <summary>
    /// Given a path, returns the UNC path or the original. (No exceptions
    /// are raised by this function directly). For example, "P:\2008-02-29"
    /// might return: "\\networkserver\Shares\Photos\2008-02-09"
    /// </summary>
    /// <param name="originalPath">The path to convert to a UNC Path</param>
    /// <returns>A UNC path. If a network drive letter is specified, the
    /// drive letter is converted to a UNC or network path. If the 
    /// originalPath cannot be converted, it is returned unchanged.</returns>
    public static string GetUNCPath(string originalPath)
    {
        StringBuilder sb = new StringBuilder(512);
        int size = sb.Capacity;

        // look for the {LETTER}: combination ...
        if (originalPath.Length > 2 && originalPath[1] == ':')
        {
            // don't use char.IsLetter here - as that can be misleading
            // the only valid drive letters are 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;
    }
}

Você constrói o programa e coloca o executável em algum lugar do seu PC, por exemplo, em c:\Utils

Agora você adiciona uma opção de menu de contexto no Explorer da seguinte forma:

Regedit e depois:

HKEY_CLASSES_ROOT\*\Directory\Shell

Right-click Shell --> New Key --> Name: "To UNC Path"
Right-click To UNC Path --> New Key --> Name: command
Right-click Default entry and select `Modify`
Value Data: c:\Utils\Utils.exe "%1"

Você terminou. Agora você verá esta opção ao clicar com o botão direito do mouse em um diretório de uma unidade mapeada:

insira a descrição da imagem aqui

Nota

Eu posso fornecer o executável para que você não precise fazer a compilação. Simplesmente mande-me uma nota aqui.


1
Vai ser legal se você compactou o arquivo executável e colocou em um espaço público como a pasta Dropbox Public e forneceu um link aqui. =)
ADTC 28/08

3
Muito trabalho, eu prefiro o uso da rede, conforme sugerido por Jimbo.
Jonas Byström

@ JonasByström Mas o resultado final é o mais agradável possível para a pergunta do OP. De modo que "muito trabalho" é precisamente o que ganha este responder à upvote, mesmo que eu não vou usá-lo pessoalmente
sehe

12

Execute o cmd.execomando net use:

C:\anywhere>net use
New connections will be remembered.
Status       Local     Remote                    Network
-------------------------------------------------------------------------------
OK           E:        \\XXXXX-XXX-XXX.whatever.com\d$
                                                Microsoft Windows Network
OK           G:        \\YYYYY-Y-YY01\SAN_INTERNAL\DEPARTMENT
                                                Microsoft Windows Network
OK           H:        \\ZZZZ-Z-ZZ01\Users$\myself
                                                Microsoft Windows Network
OK                     \\AAAAA-AAA-AAAA3\d$     Microsoft Windows Network

(Obrigado Jimbo, sua resposta foi boa, mas não breve!)


2
Lamento ter apenas um voto positivo para dar. Isso é realmente conciso. Obrigado.
user26398

1
Esta é uma abordagem ideal
Ryan B.

5

Alguém chamado Shawn Keene forneceu uma solução para isso no Fórum do Windows 7 no site da Microsoft. Está em um recurso chamado Local de Rede.

  1. Abra o Windows Explorer.

  2. Clique com o botão direito do mouse na entrada Computador no painel esquerdo e selecione "Adicionar um local de rede". Clique em Avançar.

  3. Selecione a opção "Escolha um local de rede personalizado" (foi o único apresentado a mim) e clique em Avançar.

  4. Digite o caminho UNC desejado e clique em Avançar duas vezes. Isso adiciona uma entrada que aparece no painel esquerdo do Windows Explorer abaixo das unidades mapeadas, mas funciona exatamente como uma unidade mapeada e aparece dessa maneira na caixa de diálogo Salvar aplicativos.

  5. No Windows Explorer, navegue por essa entrada até o subdiretório desejado e clique na área em branco à direita do caminho das migalhas de pão, exibida na parte superior da tela do Windows Explorer, e o caminho UNC aparece e é destacado.


1
se você citar outra fonte, também pode vincular a essa fonte?
DMA57361

Originalmente deste post - a fonte do W7 não foi especificada lá: countrykeepers.com/wp/?p=3017
Mark

Ei, obrigado por entrar em contato. Eu sei disso, foi o que eu quis dizer com "Eu poderia apenas configurar locais de rede mapeados em vez das unidades mapeadas" na pergunta - é que muitos deles me procuram como unidades mapeadas, cortesia da minha TI departamento, e eu gostaria de poder vinculá-los. Mas essa é definitivamente uma solução possível para alguns dos problemas!
Ernest Mueller

PS Eu votaria na sua resposta, mas não representaria o suficiente, então "+1 virtual!"
Ernest Mueller

4
  1. Abra a pasta
  2. À DIREITA arraste um arquivo da pasta para o Microsoft Word.

3

Mantenha Shiftpressionado e clique com o botão direito do mouse no arquivo e selecione "Copiar como caminho". Insira um Hyperlink no email e cole no campo de endereço da caixa de diálogo Hyperlink.

Depois de criar o hiperlink no email, você está pronto.

O link mostrará a letra da unidade mapeada, isso é verdade. Quando os destinatários clicam no link no email, seguirão o caminho UNC, independentemente de o usuário estar mapeado ou não.

Eu tentei isso em outros aplicativos do Office 2010, Excel, Power Point e Word.


Isso funciona, mas é a mesma resposta que do kmote resposta
davidmneedham

2

Você também pode clicar com o botão direito do mouse no nome do diretório na exibição do diretório do computador e selecionar renomear. Isso lhe dará acesso para copiar o caminho.


1
  1. Na janela do explorador, clique com o botão direito do mouse na unidade mapeada na árvore de arquivos à esquerda.
  2. Selecione Renomear.
  3. Enquanto o texto estiver destacado, clique com o botão direito do mouse-> copiar.
  4. Agora o caminho é copiado (com algum texto extra que é facilmente excluído depois de copiado para um novo local.

1
Observe que o caminho verdadeiro nem sempre aparece lá, como evidenciado pelo fato de que você pode renomeá-lo.
Ben N

1

Salve isso na pasta sendto, a minha está C:\Documents and Settings\xxxxID\SendTo com um nome como Copy UNC Filepath.vbs (deve terminar .vbs). Agora, quando você clica com o botão direito do mouse em uma pasta ou arquivo, ele copia o UNC para a área de transferência. Nossa pasta pessoal é a unidade F e, portanto, não converte C: ou F:

'send UNC filepath to clipboard when selected file is input as Send To
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")

myPath=Wscript.Arguments(0)
drive = Left(myPath,2)

if drive = "C:" OR drive = "\\" OR drive = "F:" then
    'leave unchanged
else
    Set oWSN = CreateObject("WScript.Network") 
    Set oDrives = oWSN.EnumNetworkDrives 
    For i = 0 to oDrives.Count - 1 Step 2 
        If oDrives.Item(i) = drive Then 
            sUNC = LCase(oDrives.Item(i+1)) 
            exit For
        end if
    Next 
    myPath=sUNC & Mid(myPath, 3)
end if

objIE.document.parentwindow.clipboardData.SetData "text",myPath
objIE.Quit

De Andrew Kelly : @Colkerr, tentei usar o seu "Copy UNC Filepath.vbs", mas recebo um erro de compilação VBScript no caractere de linha 2 54 "Fim esperado da instrução"
canadense Luke

Este código não funciona. Em vez disso, consulte superuser.com/a/704374/46099 se você estiver em um ambiente corporativo bloqueado.
Richard

Para localizar a pasta enviar para, digite-a na barra de localização do gerenciador de arquivos: shell: sendto O script funcionou bem para mim. fonte: dummies.com/computers/operating-systems/windows-7/…
David Lotts

0

Nas redes corporativas, a maioria dos departamentos de TI cria compartilhamentos usando os Espaços de Nome do DFS; nos compartilhamentos do DFS, você pode clicar com o botão direito do mouse em uma pasta e encontrar seu destino.

O outro método seria verificar se o compartilhamento é publicado no Active Directory. A maneira mais fácil para outros usuários encontrarem compartilhamentos sem conhecer o caminho UNC ou o nome / caminho do Servidor de Arquivos.

Se o compartilhamento de documentos com grande número de usuários, algo como o Microsoft SharePoint pode ser uma solução melhor, pois oferece uma interface da Web (com acesso no estilo WebDAV para UNC) e oferece ferramentas integradas para alertar outros usuários sobre os documentos.

Espero que isto ajude.


1
Quando clico com o botão direito do mouse nas minhas pastas, não vejo a opção "encontrar destino" - o que você quer dizer exatamente? Quero dizer, eu posso ver o caminho real, não é um mistério, só quero poder cortá-lo e ultrapassá-lo e não digitar. Quanto Sharepoint, $ 50k em software não é a minha resposta ideal para "mas eu não posso simplesmente cortar e colar um caminho ..."
Ernest Mueller

0

Crie um arquivo em lotes do DOS, como o showmappeddrives.batque contém:

@echo off    
net use
pause

Coloque o arquivo na sua área de trabalho, se quiser.
Clique duas vezes nele e ele mostrará todas as suas unidades mapeadas.


Se você adicionou uma explicação de como usar isso, sua resposta seria uma duplicata da resposta de Jimbo de 2 anos e meio atrás.
G-Man

0

Clique com o botão direito do mouse na pasta> Compartilhar> "compartilhar com você mesmo (não significa nada). Você obterá o caminho. / Ou \. Ou clique em mostrar todas as redes compartilhadas.


0

Solução simples alternativa:

Se você remover o mapeamento da unidade como uma letra de unidade, adicione-a novamente como um "local de rede" (ou seja, clique com o botão direito do mouse em "Computador" na janela do Explorer e selecione "Adicionar um local de rede") Digite o caminho completo da pasta . No futuro, ele exibirá o caminho completo na barra de endereços. No entanto, aplicativos que dependem da unidade como uma letra podem falhar.

Examinando as respostas acima, acho que não vi a solução simples acima da qual obtive: https://answers.microsoft.com/en-us/windows/forum/windows_7-files/how-can-i-display -o-caminho-unc-completo-de-um-sub / ebfd4253-8016-4cbd-b0d6-1bbeae9189f9


-2

O SHIFT + RightClick "Copiar como caminho" copiará a unidade + nome do arquivo (ou seja, R: \ test.doc) ou, se você estiver visualizando o arquivo via UNCpath, o nome do arquivo UNCpath + (ou seja "\ nas \ Documents \ test.doc ")

Esse é o comportamento "padrão" do Windows e, portanto, o meu favorito, acima de todos os plugins do Explorer, que tornam os sistemas mais lentos ....;)


1
Isso não ajuda a resolver o meu problema.
Ernest Mueller
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.