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()));
}
}
}
}
그리고 여기에 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
이제 탐색기에서 상황에 맞는 메뉴 옵션을 다음과 같이 추가하십시오.
등록 후
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"
끝났습니다. 이제 매핑 된 드라이브에서 디렉토리를 마우스 오른쪽 버튼으로 클릭하면이 옵션이 나타납니다.
노트
실행 파일을 제공 할 수 있으므로 직접 컴파일하지 않아도됩니다. 여기에 메모를 남겨주세요.