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

Ern*_*ler 105 windows-7 windows-explorer copy-paste unc mapped-drive

我经常想通过电子邮件或聊天与我团队中的其他人共享文件的 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: 驱动器,但这很不方便(他们这样做是为了可以跨服务器移动帐户)。当然,我通过电子邮件发送的路径最终可能会中断,因为我丢失了驱动器号间接寻址,但这对我来说没问题。

小智 60

也许还有很长的路要走,但打开一个 cmd 窗口。然后net use在任何文件夹中输入命令。它将返回所有映射的文件夹,如下所示(仅作为示例显示)

P:\XX\XX>net use
New connections will be remembered.

Status       Local     Remote                Network
-------------------------------------------------------------------------------
OK           N:        \\server01\Test1      Microsoft Windows Network
OK           P:        \\server02\Test1      Microsoft Windows Network
OK                     \\10.8.5.99\NOTEBOOK  Microsoft Windows Network
OK                     \\10.8.5.99\tmp       Microsoft Windows Network
Run Code Online (Sandbox Code Playgroud)

如果你愿意,你可以将上面的输出发送到一个文件,例如P:\XX\XX>net use > drives.txt. 然后打开文件:drives.txt您可以从文件中复制路径供您使用。

您也可以从命令行窗口本身复制。

希望这可以帮助。

  • 简单易行。该主题中的所有其他解决方案都非常庞大...... (11认同)
  • 或者,只需跳过“> 驱动器.txt”并直接从终端窗口复制输出路径。 (9认同)
  • `net use > filename ` 把我弄糊涂了。我在那个地方使用了我的实际 pdf 文件名,因此破坏了我原来的 pdf 文件。是的,我知道这是我的错。所以要小心。只需使用`net use`并从终端窗口复制。如果你真的需要它在一个文件中..那么你知道该怎么做..`> uncpathnamefile.txt' (3认同)

i_s*_*nes 58

我遇到了完全相同的问题——不是每个人都有和我一样的映射驱动器,或者映射到相同的字母。

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

路径复制上下文菜单示例

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

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

  • 有点乱,我更喜欢[网络使用](http://superuser.com/questions/244579/copy-unc-network-path-not-drive-letter-for-paths-on-mapped-drives-from- windows/660654#660654) 由 Jimbo 建议。 (4认同)

小智 43

杰夫基本上是正确的,但更进一步,

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

  • 应该是最好的答案,因为问题主要出现在公司环境中,您不能自己在那里安装软件。 (5认同)
  • 最快、最开箱即用 (2认同)

kmo*_*ote 39

更新:CoolCol 的方法比我的更容易。赞成那个答案。

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

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

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

小智 21

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

这里的问题是,一个人可能将网络共享映射到,Drive Y而组织中的其他人可能将相同的网络共享映射为Drive X;因此,发送诸如此类的链接Y:\mydirectory可能不适用于除我之外的其他任何人。

正如 OP 解释的那样,资源管理器确实在资源管理器栏中显示了实际路径,但即使您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()));           
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

注册,然后:

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"
Run Code Online (Sandbox Code Playgroud)

你完成了。现在,当您右键单击映射驱动器中的目录时,您将看到此选项:

在此处输入图片说明

笔记

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

  • 很多工作,我更喜欢[网络使用](http://superuser.com/questions/244579/copy-unc-network-path-not-drive-letter-for-paths-on-mapped-drives-from -windows/660654#660654) 由 Jimbo 建议。 (3认同)

Jon*_*röm 13

运行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
Run Code Online (Sandbox Code Playgroud)

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

  • 我很遗憾我只有一个赞成票。这确实是简洁的。谢谢。 (2认同)

小智 5

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

  1. 打开 Windows 资源管理器。

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

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

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

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


小智 5

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