Скопируйте сетевой путь UNC (не букву диска) для путей на подключенных дисках из проводника Windows

87

Я часто хочу поделиться сетевыми путями Windows с файлами с другими людьми в моей команде по электронной почте или в чате. Здесь у нас много подключенных дисков, как самих, так и созданных нашими ИТ-управляющими. То, что я хотел бы сделать, это скопировать полный реальный путь (не букву диска) из Проводника Windows для отправки людям.

Пример: у меня есть файл на моем диске «Q:», \\ cartman \ users \ emueller, и я хочу отправить коллегам ссылку на файл foo.doc в нем. Когда я копирую путь к файлу (shift + правый клик, «копировать как путь»), он получает имя файла «Q: \ foo.doc» в буфере обмена. Это бесполезно для других, которые должны видеть \\ cartman \ users \ emueller \ foo.doc, чтобы иметь возможность использовать ссылку.

В Проводнике он четко знает полный путь - в адресной строке я вижу «Компьютер -> emueller (\\ cartman \ users) (Q :) ->». Есть ли способ сказать "эй, человек, скопируйте этот путь как текст с \\ cartman \ users \ emueller, а не с Q: в нем?"

Я знаю, что мог бы просто настроить сопоставленные сетевые расположения вместо сопоставленных дисков для тех, которые я настроил лично, и избежать этой проблемы, но большинство сопоставленных дисков, таких как «пользователи», принадлежат нашей корпоративной ИТ-политике и не могут быть переопределенным. Я мог бы просто создать отдельное сетевое расположение и затем проигнорировать мой диск Q:, но это неудобно (и они делают это, чтобы они могли перемещать учетные записи между серверами). Конечно, мой путь по электронной почте может в конечном итоге сломаться, потому что я теряю косвенность буквы диска, но это нормально для меня.

Эрнест Мюллер
источник
1
Если вы работаете в закрытой корпоративной среде, где вы не можете установить какие-либо сторонние приложения и / или получить доступ к реестру, то это решение будет работать ... superuser.com/a/704374/46099
Ричард

Ответы:

46

У меня была точно такая же проблема - не у всех были одинаковые подключенные диски или у меня одинаковые буквы.

После долгих поисков я нашел расширение контекстного меню с именем Path Copy Copy на GitHub ( https://pathcopycopy.github.io/ ), который является расширенной версией аналогичного, более старого расширения (называемого Pathcopy), которое имеет довольно много опций для копирования путей. в виде текста, включая один для путей UNC - пример доступных параметров показан ниже:

Пример контекстного меню копирования пути

Вы также можете выбрать отображение только одной или двух строк в базовом контекстном меню, например, у вас может быть две строки: Копировать длинный путь и Копировать длинный путь UNC. Он отлично подходит для отправки электронной почты пользователям вашей компании, у которых есть доступ к сетевому пути, и если у них такое же сетевое сопоставление, как и у вас, вы можете выбрать первое, в противном случае вы можете использовать второе.

Обновление : Начиная с версии 12.0, на вышеуказанном сайте доступен новый «портативный» установщик, который устанавливает в AppData\Localпапку только текущего пользователя . Я не пробовал это, но это может быть решением для тех, кому запрещено нормальную установку.

i_saw_drones
источник
4
Немного грязно, я предпочитаю использование сети, как предложено Джимбо.
Йонас Быстрем,
49

Может быть, далеко, но откройте окно cmd. Тогда делайnet use > filename

Затем откройте имя файла, и вы можете получить путь:
Пример:

C:\Users\me\net use > drives.txt

открытие drives.txt

New connections will be remembered.
Status       Local     Remote                    Network
-------------------------------------------------------------------------------
             H:        \\server\c\proj\net       Microsoft Windows Network

Можно скопировать \\server\c\prog\netиз файла для вашего использования.

Надеюсь это поможет.

Джимбо
источник
10
просто и легко. Все остальные решения в теме очень объемные ...
radistao
8
Или просто пропустите "> drivers.txt" и скопируйте путь вывода прямо из окна терминала.
DarenW
1
Просто и легко. Выиграть.
САПР bloke
С msysgit / bash у вас под рукой это намного проще, чем другие решения. Большой!
Йонас Быстрем
1
net use > filename смутил меня .. и я использовал свое фактическое имя файла PDF в этом месте, таким образом, забил мой оригинальный файл PDF. да, я знаю, что это плохо. так что будьте аккуратнее. просто используйте net useи скопируйте из окна терминала. и если вам это действительно нужно внутри файла .. тогда вы знаете, что делать .. `> uncpathnamefile.txt '
ihightower
38

ОБНОВЛЕНИЕ: подход CoolCol даже проще, чем мой. Подтвердите этот ответ.

Вот обходной путь, который я использую при отправке путей сопоставленной сети через Outlook:

  1. В проводнике Windows shiftнажмите и удерживайте кнопку, щелкните правой кнопкой мыши файл и выберите « Копировать как путь ».
  2. Вставьте гиперссылку в электронное письмо и вставьте в поле адреса диалогового окна «Гиперссылка». (Ярлык: ctrl-K ctrl-V+ ОК). На данный момент, ссылка будет отображаться переведенной буква диска в качестве корня ( Q:\foo.doc).
  3. Теперь, r-click и выберите « Edit Hyperlink ... », вы заметите, что поле Address было переведено обратно в полный UNC-путь ( \\cartman\users\emueller\foo.doc). Наведите указатель мыши на поле «Адрес», нажмите ctrl-Aи, ctrl-Cчтобы скопировать полный путь к буферу обмена, затем переместите курсор на верхнее поле («Текст для отображения:») ctrl-Aи ctrl-Vотобразите его правильно в своем электронном письме.
kmote
источник
Я не вижу описанных вещей.
DarenW
какую часть ты не видишь? Можете ли вы создать гиперссылку? Вы знаете, как редактировать ссылку?
kmote
3
На шаге 3. Если вы введете символ и удалите его, он обновит «Текст для отображения», что проще, чем копировать / вставить.
79E09796
Вам не нужно вводить символ в «Текст для отображения», а затем удалить его, просто удалите его.
Bae
1
См. Ответ Coolcols superuser.com/a/922152/190599, чтобы ускорить копирование, щелкнув правой кнопкой мыши параметр «Создать ярлык здесь».
Bae
29

Джефф был в основном на высоте, но чтобы сделать еще один шаг вперед,

  1. ПРАВИЛЬНО перетащите папку из проводника Windows в тело вашего нового письма,
  2. затем выберите «Создать гиперссылку здесь» .
Coolcol
источник
1
самый быстрый и самый лучший из коробки-est
Алекс
3
Должен быть лучшим ответом, так как проблема возникает в основном в корпоративной среде, и вы не можете установить программное обеспечение там самостоятельно.
Березовский
Это должно быть объединено с ответом kmote superuser.com/a/454119/190599, поскольку они вместе очень быстрые
Bae
19

Мне просто нужно было то же самое, что спрашивает OP, и после поиска в Google и прочтения ответов ни один из них не предоставил то, что я думаю, что OP и я ищем.

Проблема здесь в том, что можно сопоставить общий сетевой ресурс, Drive Yтогда как кому-то еще в организации может быть сопоставлен тот же сетевой ресурс Drive X; поэтому отправка такой ссылки Y:\mydirectoryможет не работать ни для кого, кроме меня.

Как объясняет OP, Explorer отображает фактический путь в панели 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

Теперь вы добавляете опцию контекстного меню в проводнике так:

Regedit, а затем:

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"

Вы сделали. Теперь вы увидите эту опцию, если щелкнуть правой кнопкой мыши каталог с подключенного диска:

введите описание изображения здесь

Запись

Я могу предоставить исполняемый файл, так что вам не придется делать компиляцию самостоятельно. Просто напишите мне здесь.

Икар
источник
1
Будет хорошо, если вы заархивировали исполняемый файл и поместили в публичное пространство, такое как Dropbox Public folder, и предоставили здесь ссылку. =)
ADTC
3
Много работы, я предпочитаю использование сети, как предложено Джимбо.
Йонас Быстрем,
@ JonasByström Но конечный результат так же хорош, как и вопрос ОП. Так что «много работы» - это именно то, что заслужило этот ответ, даже если я не буду использовать его лично
sehe
12

Запустите 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

(Спасибо, Джимбо, твой ответ был хорошим, но не кратким!)

Йонас Быстрём
источник
2
Я сожалею, что у меня есть только одно возражение, чтобы дать. Это действительно лаконично. Благодарю.
user26398 16.09.15
1
Это идеальный подход
Райан Б.
5

Кто-то по имени Шон Кин предоставил решение этой проблемы на форуме Windows 7 на веб-сайте Microsoft. Это функция, которая называется Network Place.

  1. Откройте проводник Windows.

  2. Щелкните правой кнопкой мыши запись «Компьютер» на левой панели и выберите «Добавить сетевое расположение». Нажмите кнопку "Далее.

  3. Выберите опцию «Выбрать пользовательское сетевое расположение» (она была единственной, представленной мне) и нажмите «Далее».

  4. Введите нужный UNC-путь и дважды нажмите «Далее». Это добавляет запись, которая отображается в левой панели Проводника Windows под подключенными дисками, но работает так же, как подключенный диск, и отображается таким образом в диалоговом окне «Сохранить» приложений.

  5. В проводнике Windows перейдите через эту запись к нужному подкаталогу и щелкните в пустой области справа от отображения пути хлебных крошек в верхней части экрана проводника Windows, и появится UNC-путь, который будет выделен.

отметка
источник
1
если вы собираетесь процитировать другой источник, не могли бы вы также дать ссылку на этот источник?
DMA57361
Первоначально из этого поста - источник W7 не был указан там: countrykeepers.com/wp/?p=3017
Марк
Привет, спасибо, что включили. Я знаю об этом, вот что я имел в виду под «я мог просто настроить сопоставленные сетевые расположения вместо сопоставленных дисков» в вопросе - это то, что многие из них приходят ко мне как сопоставленные диски, любезно предоставленные моим ИТ-отделом. отдел, и я хотел бы иметь возможность связать их. Но это определенно возможное решение некоторых проблем!
Эрнест Мюллер
PS Я бы проголосовал за ваш ответ, но не достаточно респ, поэтому "виртуальный +1!"
Эрнест Мюллер
4
  1. Откройте папку.
  2. ВПРАВО перетащите файл из папки в Microsoft Word.
Geoff
источник
3

Удерживая Shiftнажатой кнопку, щелкните правой кнопкой мыши файл и выберите «Копировать как путь». Вставьте гиперссылку в электронное письмо и вставьте в поле адреса диалогового окна «Гиперссылка».

После того, как вы создали гиперссылку в письме, все готово.

Ссылка покажет букву диска, это правда. Когда получатель (и) нажимает на ссылку в электронном письме, он будет следовать по пути UNC независимо от того, сопоставлен ли пользователь или нет.

Я пробовал это в других приложениях Office 2010, Excel, Power Point и Word.

keNscale
источник
Это работает, но это тот же ответ, что и ответ
kmote
2

Вы также можете щелкнуть правой кнопкой мыши имя каталога в представлении каталога компьютера и выбрать переименовать. Это даст вам доступ к копированию пути.

Craig
источник
1
  1. В окне проводника щелкните правой кнопкой мыши на подключенном диске в дереве файлов слева.
  2. Выберите Переименовать.
  3. Пока текст выделен, щелкните правой кнопкой мыши -> скопировать.
  4. Теперь путь скопирован (с некоторым дополнительным текстом, который легко удаляется после копирования в новое место.
ThomB
источник
1
Обратите внимание, что истинный путь не всегда появляется там, о чем свидетельствует тот факт, что вы можете переименовать его.
Бен
1

Сохраните это в папке sendto, у меня C:\Documents and Settings\xxxxID\SendTo имя с таким именем Copy UNC Filepath.vbs (должно заканчиваться .vbs). Теперь, когда вы щелкаете правой кнопкой мыши по папке или файлу, он копирует UNC в буфер обмена. Наша личная папка - это диск F, поэтому она не конвертирует ни C:, ни F:

'send UNC filepath to clipboard when selected file is input as Send To
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")

myPath=Wscript.Arguments(0)
drive = Left(myPath,2)

if drive = "C:" OR drive = "\\" OR drive = "F:" then
    'leave unchanged
else
    Set oWSN = CreateObject("WScript.Network") 
    Set oDrives = oWSN.EnumNetworkDrives 
    For i = 0 to oDrives.Count - 1 Step 2 
        If oDrives.Item(i) = drive Then 
            sUNC = LCase(oDrives.Item(i+1)) 
            exit For
        end if
    Next 
    myPath=sUNC & Mid(myPath, 3)
end if

objIE.document.parentwindow.clipboardData.SetData "text",myPath
objIE.Quit
Colkerr
источник
От Эндрю Келли : @Colkerr, я пытался использовать ваш «Copy UNC Filepath.vbs», но я получаю ошибку компиляции VBScript в строке 2 символа 54 «Ожидаемый конец оператора»
канадский Люк
Этот код не работает. Я бы посмотрел на superuser.com/a/704374/46099, если вы находитесь в закрытой корпоративной среде.
Ричард
Чтобы найти отправку в папку, введите это в адресной строке проводника: shell: sendto Сценарий у меня работал нормально. источник: dummies.com/computers/operating-systems/windows-7/…
Дэвид Лоттс
0

В корпоративных сетях большинство ИТ-отделов создают общие ресурсы с использованием пространств имен DFS. В общих ресурсах DFS вы можете щелкнуть правой кнопкой мыши папку и найти ее цель.

Другим методом было бы посмотреть, опубликован ли общий ресурс в Active Directory. Для других пользователей самый простой способ найти общие ресурсы, не зная пути UNC или имени / пути файлового сервера.

Если вы обмениваетесь документами с большим количеством пользователей, лучше использовать Microsoft SharePoint, поскольку он предлагает веб-интерфейс (с WebDAV для доступа в стиле UNC) и предлагает встроенные инструменты для оповещения других пользователей о документах.

Надеюсь это поможет.

dmd83
источник
1
Когда я щелкаю правой кнопкой мыши по своим папкам, я не вижу опцию «найти цель» - что именно вы имеете в виду? Я имею в виду, я вижу реальный путь, это не загадка, я просто хочу быть в состоянии обрезать и пройти его, а не печатать. Что касается Sharepoint, $ 50 тыс. В программном обеспечении - не мой идеальный ответ на вопрос «но я не могу просто вырезать и вставить путь ...»
Эрнест Мюллер,
0

Создайте пакетный файл DOS, например, showmappeddrives.batкоторый содержит:

@echo off    
net use
pause

Поместите файл на рабочий стол, если хотите.
Дважды щелкните по нему, и он покажет все ваши подключенные диски.

Принц
источник
Если вы добавили объяснение того, как это использовать, то ваш ответ будет дубликатом ответа Джимбо от 2,5 лет назад.
G-Man
0

Щелкните правой кнопкой мыши папку> «Поделиться»> «поделиться с самим собой» (ничего не значит). Вы получите путь. / Или \. Или нажмите «Показать все сети общего доступа».

AABBCC
источник
0

Альтернативное простое решение:

Если вы отключите диск как букву диска, а затем добавьте его как «сетевое расположение» (т. Е. Щелкните правой кнопкой мыши «Компьютер» в окне проводника и выберите «Добавить сетевое расположение»). Введите полный путь к папке. , В дальнейшем он отобразит полный путь в адресной строке. Тем не менее, приложения, которые зависят от диска в виде буквы, могут выйти из строя.

Просматривая ответы выше, я не думаю, что видел простое решение выше, которое я получил от: https://answers.microsoft.com/en-us/windows/forum/windows_7-files/how-can-i-display -The-полный путь в формате UNC-оф-а-суб / ebfd4253-8016-4cbd-b0d6-1bbeae9189f9

Aiju
источник
-2

SHIFT + правый клик «Копировать как путь» скопирует диск + имя файла (то есть R: \ test.doc), или, если вы просматриваете файл через UNCpath, UNCpath + имя файла (то есть «\ nas \ Documents \ test.doc» «)

Это «стандартное» поведение Windows, и, следовательно, мой любимый, прежде всего, плагин проводника, который замедляет работу систем.;)

Luuk
источник
1
Это не поможет решить мою проблему.
Эрнест Мюллер