web-dev-qa-db-ja.com

Windowsエックスプローラから割り当たられたドライブ上のパスのUNCネットワークパス(ドライブ名ではない)をコピー

私は頻繁に私のチームの他の人々とファイルへの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:ではありませんか」と言う方法はありますか?

私が個人的に設定したドライブには、割り当てられたドライブの代わりに割り当てられたネットワークの場所を設定してこの問題を回避することができますが、「ユーザー」共有のようなほとんどの割り当てドライブ上書きされます。別のネットワーク上の場所を作成してからQ:ドライブを無視することもできますが、それは不便です(そして、サーバー間でアカウントを移動できるようにするため、そうしています)。ドライブレターの間接参照を失ったために電子メールで送信されたパスが最終的に破損する可能性がありますが、問題はありません。

83
Ernest Mueller

私はまったく同じ問題を抱えていました - 誰もが私と同じドライブをマップしていたり​​、同じ文字にマップしていたわけではありません。

多くの検索の結果、私はGitHubでPath Copy Copyという名前のコンテキストメニュー拡張を見つけました( https://pathcopycopy.github.io/ )似たような古い拡張子(Pathcopyと呼ばれる)の拡張版で、パスをテキストとしてコピーするためのオプションがいくつかあります(UNCパス用など)。使用可能なオプションの例を以下に示します。

Path Copy Context Menu example

また、基本コンテキストメニューに1行または2行だけを表示するように選択することもできます。たとえば、Copy Long PathとCopy Long UNC Pathの2行を持つことができます。社内のネットワークパスにアクセスできるユーザーに電子メールを送信するのに最適です。また、自分と同じネットワークマッピングを持っている場合は前者を選択できます。それ以外の場合は後者を使用できます。

Update:バージョン12.0以降、上記のサイトで新しい "ポータブル"インストーラが利用可能になりました。これは現在のユーザーのためだけにAppData\Localフォルダにインストールされます。私はこれを試したことはありませんが、通常のインストールが禁止されている人のための解決策になるかもしれません。

42
i_saw_drones

たぶん長い道のりだが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をコピーすることができます。

お役に立てれば。

48
Jimbo

UPDATE:CoolCoolのアプローチ は偶数私よりも簡単です。彼の答えを支持しなさい

Outlook経由でネットワークマッピングパスを送信するときに使用する回避策は次のとおりです。

  1. Windowsエクスプローラで、 shift ボタンを押し、ファイルを右クリックして、[パスとしてコピー]を選択します。
  2. 電子メールにハイパーリンクを挿入し、ハイパーリンクダイアログボックスのアドレスフィールドに貼り付けます。 (ショートカット: ctrl-Kctrl-V + OK)この時点で、リンクはマップされたドライブ文字をルート(Q:\foo.doc)として表示します。
  3. さて、右クリックして "ハイパーリンクの編集..."を選択してください。 fieldは完全なUNCパス(\\cartman\users\emueller\foo.doc)に変換されました。マウスを[住所]フィールドに置いて、ヒットします。 ctrl-A そして ctrl-C フルパスをクリップボードにコピーしてから、カーソルを一番上のフィールド( "Text to Display:")に移動します。 ctrl-A そして ctrl-V あなたのEメールに正しく表示するため。
37
kmote

Geoff が基本的に注目されていましたが、さらに一歩進んで

  1. Windowsエクスプローラから新しい電子メールの本文にフォルダを右ドラッグします。
  2. 次に、「ここにハイパーリンクを作成」を選択します。
25
Coolcol

私は、OPが求めているものと、Googleで検索して答えを読んだ後で同じものを必要としていましたが、どれも私がOPと思い、探しているものを提供しませんでした。

ここでの問題は、ネットワーク共有をDrive Yにマッピングするのに対して、組織内の他の誰かがDrive Xとして同じネットワーク共有をマッピングする可能性があることです。したがって、Y:\mydirectoryなどのリンクを送信しても、私以外の人にはうまくいかない場合があります。

OPが説明するように、エクスプローラはエクスプローラバーに実際のパスを表示しますが、コンテキストメニューからcopy as pathを選択してもコピーすることはできません(入力は面倒でエラーが発生しやすいのでこれはオプションではありません)

enter image description here

だから私が(他の誰かのコードをコピーすることによって)思いついた解決策はあなたがエクスプローラのコンテキストメニューから呼び出すことができて、そしてあなたが実際のUNC pathにあなたがマップすることを可能にする小さなC#プログラムでした。

これがコードです:

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の中で

これで、エクスプローラにコンテキストメニューオプションを追加しました。

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"

これで終わりです。マップされたドライブからディレクトリを右クリックすると、このオプションが表示されます。

enter image description here

注意

19
Icarus

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

(Jimboさん、 あなたの答え はよかったですが簡単ではありませんでした!)

11
Jonas Byström

Shawn Keeneという名前の誰かが、MicrosoftのWebサイトのWindows 7フォーラムで 解決策 を提供しました。 Network Placeという機能にあります。

  1. Windowsエクスプローラを開きます。

  2. 左ペインの[コンピュータ]エントリを右クリックし、[ネットワークの場所を追加]を選択します。次へをクリックしてください。

  3. [カスタムネットワークの場所を選択する]オプションを選択し(それが私に提示された唯一のものでした)、[次へ]をクリックします。

  4. 目的のUNCパスを入力して、[次へ]を2回クリックします。これにより、マップされたドライブの下のWindowsエクスプローラの左ペインに表示されるエントリが追加されますが、マップされたドライブと同じように機能し、アプリケーションの保存ダイアログにそのように表示されます。

  5. Windowsエクスプローラで、そのエントリを目的のサブディレクトリに移動し、Windowsエクスプローラ画面の上部にあるパンくずリストのパス表示の右側の空白部分をクリックすると、UNCパスが表示されて強調表示されます。

5
Mark
  1. フォルダを開きます。
  2. フォルダからMicrosoft Wordにファイルを右ドラッグします。
4
Geoff

ホールド Shift ファイルを右クリックして[パスとしてコピー]を選択します。電子メールにハイパーリンクを挿入し、ハイパーリンクダイアログボックスのアドレスフィールドに貼り付けます。

電子メールにハイパーリンクを作成したら、完了です。

リンクはマッピングされたドライブ文字を表示しますこれは本当です。受信者が電子メールのリンクをクリックすると、ユーザーがマップされているかどうかにかかわらず、受信者はUNCパスをたどります。

私は他のOffice 2010アプリケーション、Excel、Power Point、およびWordでこれを試しました。

3
keNscale

コンピュータのディレクトリビューでディレクトリ名を右クリックして[名前の変更]を選択することもできます。これでパスをコピーすることができます。

2
Craig
  1. エクスプローラウィンドウで、左側のファイルツリーでマップされたドライブを右クリックします。
  2. 名前の変更を選択します。
  3. テキストが強調表示されている間に、right_click-> copyをクリックします。
  4. これでパスがコピーされました(新しい場所にコピーした後に簡単に削除される余分なテキスト付き)。
1
ThomB

これをあなたのsendtoフォルダに保存してください。私のフォルダはC:\Documents and Settings\xxxxID\SendToのような名前でCopy UNC Filepath.vbsにあります(.vbsは終了しなければなりません)。私たちの個人用フォルダは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
1
Colkerr

フォルダを右クリック>共有> "自分と共有(何も意味しません)。パスが表示されます。または[すべてのネットワーク共有を表示]をクリックします。

0
aabbcc

企業ネットワークでは、ほとんどのIT部門がDFS名前空間を使用して共有を作成し、DFS共有内でフォルダを右クリックしてそのターゲットを見つけることができます。

もう1つの方法は、共有がActive Directoryに公開されているかどうかを確認することです。他のユーザーがUNCパスやファイルサーバーの名前/パスを知らなくても共有を見つける最も簡単な方法。

多数のユーザーとドキュメントを共有する場合は、Webインターフェイス(UNCスタイルのアクセス用にWebDAVを使用)を提供し、他のユーザーにドキュメントを通知するためのツールが組み込まれているため、Microsoft SharePointのようなソリューションが優れています。

お役に立てれば。

0
dmd83

代替の簡単な解決策:

ドライブをドライブ文字として割り当て解除した場合は、代わりに「ネットワーク上の場所」として追加し直します(すなわち、エクスプローラウィンドウで「コンピュータ」を右クリックし、「ネットワーク上の場所を追加」を選択します)。 。進むと、アドレスバーにフルパスが表示されます。ただし、ドライブを文字として使用するアプリケーションは失敗する可能性があります。

上記の回答を見てみると、私が上記の簡単な解決策を見たとは思わない。 https://answers.Microsoft.com/ja-jp/windows/forum/windows_7- files/how-can-i-sub-の絶対パスを表示する/ ebfd4253-8016-4cbd-b0d6-1bbeae9189f9

0
Aiju

以下を含むshowmappeddrives.batのようなDOSバッチファイルを作成します。

@echo off    
Net Use
pause

必要に応じてファイルをデスクトップに置きます。
これをダブルクリックすると、マップされたドライブがすべて表示されます。

0
ThePrince