我经常想通过电子邮件或聊天与团队中的其他人共享文件的 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
杰夫基本上是正确的,但更进一步说,
- 右键单击 Windows 资源管理器中的文件夹,将其拖到新电子邮件的正文中,
- 然后选择‘在此创建超链接’。
答案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"
您已完成。现在,当您右键单击映射驱动器中的目录时,您将看到此选项: