从Windows资源管理器中复制UNC网络路径(不是驱动器号)以映射驱动器上的路径


87

我经常想通过电子邮件或聊天与团队中的其他人共享Windows网络文件路径。我们这里有很多映射的驱动器,既是我们自己设置的,也是由IT霸主设置的。我想做的是从Windows资源管理器复制完整的真实路径(而不是驱动器号)以发送给其他人。

示例:我的“ Q:”驱动器中有一个文件\\ cartman \ users \ emueller,并且我想向其中的同事发送指向文件foo.doc的链接。当我复制文件路径(按住Shift并单击右键,“复制为路径”)时,它在剪贴板中的文件名为“ Q:\ foo.doc”。这对其他人没有帮助,其他人需要查看\\ cartman \ users \ emueller \ foo.doc才能使用该链接。

在资源管理器中,它清楚地知道完整路径-在地址栏中,我看到“计算机-> emueller(\\ cartman \ users)(Q :)->”。有没有办法说“嘿,那个人用\\ cartman \ users \ emueller而不是Q:将该路径复制为文本?”

我知道我可以只设置映射的网络位置,而不是为我亲自设置的驱动器设置映射的驱动器,这样可以避免此问题,但是大多数映射的驱动器(例如“用户”共享)都来自我们的公司IT策略,因此无法被覆盖。我可以仅设置一个单独的网络位置,然后忽略我的Q:驱动器,但这很不方便(他们这样做是为了使他们可以在服务器之间移动帐户)。当然,我的电子邮件发送路径最终可能会中断,因为我丢失了驱动器号的间接访问权限,但是我可以接受。


1
如果您在无法安装任何第三方应用程序和/或访问注册表的锁定企业环境中运行,则此解决方案将起作用... superuser.com/a/704374/46099
Richard

Answers:


46

我遇到了完全相同的问题-并非每个人都有与我相同的映射驱动器,或映射到相同的字母。

经过大量搜索后,我在GitHub(https://pathcopycopy.github.io/)上找到了一个名为Path Copy Copy的上下文菜单扩展,它是类似的较旧扩展(称为Pathcopy)的扩展版本,具有很多复制路径的选项作为文本,包括一个UNC路径-可用选项的示例如下所示:

路径复制上下文菜单示例

您还可以选择在基本上下文菜单上仅显示一两行,例如,您可以有两行“复制长路径”和“复制长UNC路径”。对于向公司中可以访问网络路径的用户发送电子邮件非常有用,如果他们具有与您相同的网络映射,则可以选择前者,否则可以使用后者。

更新:从12.0版开始,上述站点上提供了一个新的“便携式”安装程序,该安装程序仅将当前用户安装到该AppData\Local文件夹中。我没有尝试过,但是对于那些被禁止正常安装的人来说,它可能是解决方案。


4
有点混乱,我更喜欢Jimbo建议的网络使用
乔纳斯·比斯特罗姆(JonasByström)2013年

49

也许很长的路要走,但要打开一个cmd窗口。然后做net use > filename

然后打开文件名,您可以获取路径:
例如:

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

开场 drives.txt

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

可以\\server\c\prog\net从文件中复制供您使用。

希望这可以帮助。


10
简单容易。该主题中的所有其他解决方案都很
庞大

8
或者,只需跳过“>” drives.txt“,然后直接从终端窗口复制输出的路径。
DarenW

1
简单容易。赢得。
CAD bloke 2013年

轻而易举地使用msysgit / bash,这比其他解决方案要容易得多。盛大!
乔纳斯·比斯特罗姆(JonasByström),

1
net use > filename 令我感到困惑..我在那个地方使用了我实际的pdf文件名,从而破坏了我原来的pdf文件。是的,我知道这是我的坏事。小心点 只需使用net use并从终端窗口复制即可。如果你需要一个真正的文件中..然后,你知道该怎么做..'> uncpathnamefile.txt”
ihightower

38

更新:CoolCol的方法比我的方法更容易。支持该答案。

这是通过Outlook发送映射的网络路径时使用的解决方法:

  1. 在Windows资源管理器中,按住shift按钮,右键单击文件,然后选择“ 复制为路径 ”。
  2. 在电子邮件中插入一个超链接,然后粘贴在“超链接”对话框的地址字段中。(快捷方式:ctrl-K ctrl-V+ OK)。此时,链接将显示映射的驱动器号为根(Q:\foo.doc)。
  3. 现在,右键单击并选择“ Edit Hyperlink ... ”,您将注意到“地址”字段已转换回完整的UNC路径(\\cartman\users\emueller\foo.doc)。用鼠标在“地址”字段中,单击ctrl-A并将ctrl-C完整路径复制到剪贴板,然后将光标移到顶部字段(“要显示的文本:”)ctrl-Actrl-V在电子邮件中正确显示。

我看不到所描述的东西。
DarenW

您看不到哪一部分?您可以创建超链接吗?您知道如何编辑链接吗?
kmote

3
在第3步中,如果键入一个字符并将其删除,它将更新“要显示的文本”,这比复制/粘贴容易。
79E09796

您无需在“要显示的文本”中键入字符,然后将其删除,只需将其删除即可。
2016年

1
请参阅Coolcol的答案superuser.com/a/922152/190599,以通过右键单击“在此处创建快捷方式”选项来加快复制速度。
2016年

29

杰夫(Geoff)基本上是当场人物,但如果再走一步,

  1. 将Windows资源管理器中的文件夹右拖到新电子邮件的正文中,
  2. 然后选择“在此处创建超链接”

1
最快,最快捷的方式
Alex

3
应该是最好的答案,因为问题主要出现在公司环境中,并且您不能自己在那安装软件。
berezovskyi 2015年

这需要与kmote的答案superuser.com/a/454119/190599合并,因为两者在一起非常快
Bae,

19

我只是需要OP询问同样的事情,在Google上搜索并阅读答案后,他们都没有提供我认为OP和我正在寻找的东西。

这里的问题是,一个人可能将一个网络共享映射到;Drive Y而组织中的其他人可能将相同的网络共享映射为Drive X;因此,发送诸如这样的链接Y:\mydirectory可能对我以外的其他任何人都无效。

正如OP所述,Explorer确实在Explorer栏中显示了实际路径,但是即使您copy as path从上下文菜单中进行选择,您也无法复制它(键入很繁琐且容易出错,因此这不是一个选择):

在此处输入图片说明

因此,我想出的解决方案(通过复制其他人的代码)是一个小的C#程序,您可以从资源管理器的上下文菜单中调用它,并允许您将映射的驱动器号转换为实际的UNC path

这是代码:

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()));           
            }
        }
    }
}

这是Pathing类的定义(由于不记得在哪里找到了,所以我将尝试查找实际的源代码):

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;
    }
}

您生成程序并将可执行文件放入PC中的某个位置,例如, c:\Utils

现在,您可以在资源管理器中添加一个上下文菜单选项,如下所示:

Regedit,然后:

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"

大功告成 现在,当您从映射驱动器上右键单击目录时,将看到此选项:

在此处输入图片说明

注意

我可以提供可执行文件,因此您不必自己进行编译。只需在此处给我留言。


1
如果您将可执行文件压缩并放入诸如Dropbox Public文件夹之类的公共空间并在此处提供了链接,那将会很好。=)
ADTC

3
很多工作,我更喜欢Jimbo建议的网络使用
乔纳斯·比斯特罗姆(JonasByström)2013年

@JonasByström但最终结果与OP的问题一样好。因此,即使我不会亲自使用“大量工作”,也正是赢得这一
答谢的原因

12

运行cmd.exe命令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

(感谢Jimbo,您的回答很好,但不简短!)


2
我感到遗憾的是,我只能提出一个支持。这确实是简洁的。谢谢。
user26398

1
这是一个理想的方法
Ryan B.

5

名为Shawn Keene的人在Microsoft网站上的Windows 7论坛中提供了解决方案。它在一个称为网上邻居的功能中。

  1. 打开Windows资源管理器。

  2. 右键单击左窗格中的“计算机”条目,然后选择“添加网络位置”。点击下一步。

  3. 选择“选择一个自定义网络位置”选项(这是唯一显示给我的位置),然后单击“下一步”。

  4. 键入所需的UNC路径,然后单击两次Next。这将添加一个条目,该条目显示在Windows资源管理器的左侧窗格中的映射驱动器下方,但它的工作原理与映射驱动器相同,并以这种方式在应用程序的“保存”对话框中显示。

  5. 在Windows资源管理器中,浏览该条目至所需的子目录,然后在Windows资源管理器屏幕顶部的面包屑路径显示右侧的空白区域中单击,出现并突出显示UNC路径。


1
如果您要引用其他来源,也可以链接到该来源吗?
DMA57361 2011年

最初是通过此帖子发布的-那里没有指定W7来源:countrykeepers.com/wp/?p=3017
标记

嘿,谢谢您的来信。我知道这一点,这就是我在问题中“可以只设置映射的网络位置而不是映射的驱动器”的意思-这是因为映射驱动器是我中的许多人,这是我的IT礼貌。部门,我希望能够将它们链接起来。但这绝对是某些问题的可能解决方案!
欧内斯特·穆勒

附言:我会投票支持您的答案,但代表却不足,因此请“虚拟+1!”
欧内斯特·穆勒

4
  1. 打开文件夹。
  2. 右键将文件从文件夹拖到Microsoft Word中。

3

按住Shift并右键单击文件,然后选择“复制为路径”。在电子邮件中插入一个超链接,然后粘贴在“超链接”对话框的地址字段中。

在电子邮件中创建超链接之后,就完成了。

该链接将显示映射的驱动器号,这是正确的。当收件人单击电子邮件中的链接时,无论是否映射了用户,它将遵循UNC路径。

我已经在其他Office 2010应用程序,Excel,Power Point和Word中进行了尝试。


这行得通,但与kmote的答案
davidmneedham

2

您也可以在计算机目录视图中右键单击目录名称,然后选择重命名。这将使您可以复制路径。


1
  1. 在资源管理器窗口中,右键单击左侧文件树中的映射驱动器。
  2. 选择重命名。
  3. 突出显示文本时,右键单击->复制。
  4. 现在,路径已复制(带有一些多余的文本,在复制到新位置后可以轻松删除这些文本。

1
请注意,真实路径并不总是在那里出现,您可以重命名这一事实证明了这一点。
本N

1

将其保存在sendto文件夹中,我 C:\Documents and Settings\xxxxID\SendTo 的名称类似Copy UNC Filepath.vbs (必须以.vbs结尾)现在,当您右键单击文件夹或文件时,它将UNC复制到剪贴板。我们的个人文件夹是F驱动器,因此它不会转换C:或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

来自安德鲁·凯利(Andrew Kelly):@Colkerr,我尝试使用您的“ Copy UNC Filepath.vbs”,但在第2行字符54“语句的预期结尾”上遇到了VBScript编译错误
加拿大卢克

此代码无效。如果您处于封闭的公司环境中,我会去看superuser.com/a/704374/46099
理查德

要找到发送到文件夹,请在文件浏览器的位置栏中输入以下内容:shell:sendto该脚本对我来说很好用。来源: dummies.com/computers/operating-systems/windows-7/...
大卫Lotts

0

在公司网络中,大多数IT部门使用DFS命名空间创建共享,在DFS共享中,您可以右键单击文件夹并找到其目标。

另一种方法是查看共享是否已发布到Active Directory中。其他用户不知道UNC路径或文件服务器名称/路径的最简单方法。

如果您与大量用户共享文档,则Microsoft SharePoint之类的解决方案可能是更好的解决方案,因为它提供了一个Web界面(具有用于UNC样式访问的WebDAV)并提供了一些内置工具来提醒其他用户注意文档。

希望这可以帮助。


1
当我右键单击我的文件夹时,我没有看到“查找目标”选项-您的确切含义是什么?我的意思是,我可以看到真正的路径,这不是一个谜,我只是想能够剪切并超越它,而不是打字。至于Sharepoint,5万美元的软件并不是我理想的答案,“但我不能只剪切并粘贴一条路径...”
欧内斯特·穆勒

0

创建一个DOS批处理文件showmappeddrives.bat,其中包含:

@echo off    
net use
pause

如果需要,可将文件放在桌面上。
双击它,它将显示所有映射的驱动器。


如果您添加了如何使用它的说明,那么您的答案将是2.5年前Jimbo的答案的重复。
G-Man

0

右键单击文件夹>共享>“与自己共享(什么也没有)。您将获得路径。/或\。或单击显示所有网络共享。


0

替代的简单解决方案:

如果将驱动器取消映射为驱动器号,则将其重新添加为“网络位置”(即,在资源管理器窗口中右键单击“计算机”,然后选择“添加网络位置”)。键入文件夹的完整路径。继续前进,它将在地址栏中显示完整路径。但是,依赖驱动器字母的应用程序可能会失败。

通过上面的答复,我认为我没有看到从以下网址获得的简单解决方案:https : //answers.microsoft.com/zh-cn/windows/forum/windows_7-files/how-can-i-display Sub / ebfd4253-8016-4cbd-b0d6-1bbeae9189f9的完整UNC路径


-2

SHIFT +右键单击“复制为路径”将复制驱动器+文件名(即R:\ test.doc),或者如果您通过UNCpath查看文件,则UNCpath +文件名(即“ \ nas \ Documents \ test.doc” ”)

这是Windows的“标准”行为,因此也是我最喜欢的,首先是使系统运行缓慢的资源管理器插件。


1
这无助于解决我的问题。
欧内斯特·穆勒
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.