笔记

笔记

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

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

在 Explorer 中,它清楚地知道完整路径 - 在地址栏中我看到“计算机 -> emueller (\\cartman\users) (Q:) ->”。有没有办法说“嘿伙计,将该路径复制为文本,其中包含 \\cartman\users\emueller 而不是 Q:?”

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

答案1

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

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

路径复制上下文菜单示例

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

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

答案2

可能绕了很长的路,但打开一个 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

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

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

希望这可以帮助。

答案3

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

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

答案4

我只是需要 OP 所问的同样的东西,但在 Google 上搜索并阅读答案后,没有一个能提供我认为 OP 和我正在寻找的东西。

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

正如 OP 所解释的,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;
    }
}

你构建程序并将可执行文件放在你的电脑的某个地方,例如,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"

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

在此处输入图片描述

笔记

我可以提供可执行文件,这样您就不必自己进行编译。只需在这里给我留言即可。

相关内容