在 Windows 资源管理器中生成“file://”URI

在 Windows 资源管理器中生成“file://”URI

我正在寻找一种从 Windows 资源管理器中获取正确文件:/ URI 的方法。基本上,我希望有一个上下文菜单条目,上面写着“将文件 URI 复制到剪贴板”。有类似的东西吗?

这不是“将文件名复制到剪贴板”的重复,因为我想要的是文件 URI 而不是路径名。

需要澄清的是:我希望获取“file:///c:/Temp/foo%20bar.txt”,而不是“C:\Temp\foo bar.txt”,也不是“foo bar.txt”,也不是“C:\Temp”。

答案1

刚刚想到了这个 VBS。

If WScript.arguments.count > 0 Then
    Dim WshShell: Set WshShell = WScript.CreateObject("Wscript.Shell")
    strPath = "file:///" & Wscript.Arguments(0)
    strPath = Replace(strPath,"\","/")
    strPath = Replace(strPath," ","%20")
    sCmd = "%comspec% /c<nul (set/p anyvariable=" & Chr(34) & strPath & Chr(34) & ")|clip.exe"
    WshShell.Run sCmd,0,0
    Set WshShell = Nothing
End If

将其保存为 .VBS 文件。将文件拖放到 VBScript 上,它会将文件的 URI 复制到剪贴板。如果需要,您可以在右键菜单中实现它。

它将文件名复制到内存中,反转斜线,用“%20”替换空格,并在开头附加“file:///”。这是一个基本脚本,仅支持一个文件名/参数。您可以根据需要对其进行修改。

将脚本添加到“发送到”文件夹

您可以将脚本的快捷方式放在“发送到”文件夹中。按WinKey+ R,键入shell:sendto,然后按ENTER。在“发送到”文件夹中创建脚本的快捷方式并相应命名。(例如Copy File URI

现在,右键单击一个文件,单击发送到,然后单击Copy File URI。文件路径将被复制到剪贴板,URI 格式如下。

file:///C:/Users/jack/desktop/list-of-items.txt

答案2

VBS 脚本很好,但它无法处理所有的边缘情况,就像UrlCreateFromPath或 .NET 的系统URI

幸运的是,两者都很容易使用,以下是我所做的:

using System;
using System.Windows.Forms;

namespace AbsoluteUriGenerator
{
    class Program
    {
        [STAThread]
        static int Main(string[] args)
        {
            if (args.Length != 1)
            {
                var executableName = typeof(Program).Assembly.GetName().Name + ".exe";
                Console.WriteLine("Usage: {0} pathToConvert", executableName);
                Console.WriteLine("Example: {0} \"C:\\foo\"", executableName);
                return 1;
            }

            var path = args[0];
            Console.WriteLine("Resolving file:// URI of path: {0}", path);
            var fileUri = new Uri(path).AbsoluteUri;

            Console.WriteLine("Setting clipboard to resolved file:// URI: {0}", fileUri);
            Clipboard.SetText(fileUri);
            return 0;
        }
    }
}

您可以将其复制到您的shell:sendto文件夹中,这是一个编译版本:https://1drv.ms/u/s!Aj2cMNVj29ben4B_mh9Md5R4ghBlMQ

相关内容