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您可以从文件中复制路径供您使用。
您也可以从命令行窗口本身复制。
希望这可以帮助。
i_s*_*nes 58
我遇到了完全相同的问题——不是每个人都有和我一样的映射驱动器,或者映射到相同的字母。
经过大量搜索,我在 GitHub ( https://pathcopycopy.github.io/ )上找到了一个名为Path Copy Copy的上下文菜单扩展,它是类似的旧扩展(称为 Pathcopy)的扩展版本,有很多复制路径的选项作为文本,包括一个 UNC 路径——可用选项的示例如下所示:

您还可以选择在基本上下文菜单上仅显示一两行,例如您可以有两行,“复制长路径”和“复制长 UNC 路径”。它非常适合向您公司中有权访问网络路径的用户发送电子邮件,如果他们的网络映射与您相同,您可以选择前者,否则您可以使用后者。
更新:从 12.0 版开始,上述站点上提供了一个新的“便携式”安装程序,该安装程序仅为当前用户安装到AppData\Local文件夹中。这个我没试过,但对于那些被禁止正常安装的人来说,这可能是一个解决方案。
kmo*_*ote 39
更新:CoolCol 的方法比我的更容易。赞成那个答案。
这是我通过 Outlook 发送映射网络路径时使用的解决方法:
Q:\foo.doc)。\\cartman\users\emueller\foo.doc)。使用鼠标在地址字段中,点击ctrl-A并将ctrl-C完整路径复制到剪贴板,然后将光标移动到顶部字段(“要显示的文本:”)点击ctrl-A并ctrl-V在电子邮件中正确显示。小智 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)
你完成了。现在,当您右键单击映射驱动器中的目录时,您将看到此选项:

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,你的回答很好但不简短!)
小智 5
一个名叫 Shawn Keene 的人在 Microsoft 网站上的 Windows 7 论坛中提供了一个解决方案。它位于称为网上邻居的功能中。
打开 Windows 资源管理器。
右键单击左窗格中的计算机条目,然后选择“添加网络位置”。点击下一步。
选择“选择自定义网络位置”选项(这是唯一呈现给我的选项),然后单击“下一步”。
键入所需的 UNC 路径,然后单击“下一步”两次。这会添加一个条目,该条目显示在映射驱动器下方的 Windows 资源管理器的左窗格中,但它的工作方式与映射驱动器一样,并以这种方式显示在应用程序的“保存”对话框中。
在 Windows 资源管理器中,通过该条目导航到所需的子目录,然后单击 Windows 资源管理器屏幕顶部面包屑路径显示右侧的空白区域,UNC 路径将出现并突出显示。
| 归档时间: |
|
| 查看次数: |
397858 次 |
| 最近记录: |