在 Windows 上打开 smb:// 链接

在 Windows 上打开 smb:// 链接

有什么方法可以让 Windows(最好是 10)资源管理器打开 smb 协议 URI?喜欢smb://1.2.3.4/file.txt

我处于一个多样化的环境中,操作系统(主要是 Windows、Mac 和 Linux)以及我们正在使用的 Web 服务(slack、youtrack),但我们所有的文件都位于具有 samba 共享的服务器上,很难有所有人都可以访问的可点击链接。

我们有两种统一选择:

  1. Windows 方式file://X:/
  2. Unix 方式?-smb://1.2.3.4/

我发现使用 Web 工具来使用 smb 链接更容易,slack 可以识别它们,mac 和 linux 可以正常打开它们,只是 Windows 拒绝识别该协议,尽管地址本身可以工作。

答案1

感谢 DavidPostill 为我指明了正确的方向。以下是我所做的:

注册表文件(smb.reg):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\smb]
"URL Protocol"=""
@="URL:SMB Protocol"

[HKEY_CLASSES_ROOT\smb\DefaultIcon]
@="explorer.exe,1"

[HKEY_CLASSES_ROOT\smb\shell]
[HKEY_CLASSES_ROOT\smb\shell\open]
[HKEY_CLASSES_ROOT\smb\shell\open\command]
@="\"C:\\OpenLink\\openLink.bat\" \"%1\""

批处理文件(openLink.bat):

@echo off
set str=%1
set str=%str:smb:=%
set str=%str:/=\%
explorer.exe %str%

而且效果非常好。:)

答案2

如果您的 SMB 链接包含空格,您可以使用 Eskel 的答案中的以下改进的批处理脚本:

@echo off

set str=%1
set str=%str:smb:=%
set str=%str:/=\%

setlocal EnableDelayedExpansion
set str=!str:%%20= !

rem echo %str% & pause

explorer.exe %str%

答案3

无论出于什么原因,在 Windows 10 中,调用explorer.exe此处其他答案中详述的方法不起作用;它总是只会打开用户的文档位置。相反,我发现这样start "" %str%做有效。

为了完整性,这是openLink.bat我基于奥伯利斯的进步Eskel 的原始答案

@echo off

set str=%1
set str=%str:smb:=%
set str=%str:/=\%

setlocal EnableDelayedExpansion
set str=!str:%%20= !

rem echo %str% & pause
start "" %str%

这是我使用的 .reg 文件:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\smb]
"URL Protocol"=""
@="URL:SMB Protocol"

[HKEY_CLASSES_ROOT\smb\DefaultIcon]
@="explorer.exe,1"

[HKEY_CLASSES_ROOT\smb\shell]
[HKEY_CLASSES_ROOT\smb\shell\open]
[HKEY_CLASSES_ROOT\smb\shell\open\command]
@="\"C:\\Windows\\openLink.bat\" \"%1\""

(这与 Eskel 的原版相同,只是我不想创建另一个文件夹来破坏 C: 驱动器上的列表,所以我只是将批处理文件扔进了 Windows 文件夹。作为奖励,这会将其放在 Windows $PATH 或 %PATH% 中,我想。)

答案4

在 Windows 上最简单的方法是假设你的浏览器已启用 Javascript,如下所示:

JS:如果(navigator.userAgent.indexOf('Windows')!=-1){document.getElementById('objDiv')。innerHTML ='SMB 位置';}

我假设您有一个 id=objDiv 的 DIV 标签。请注意,尽管 Chrome、Firefox、IE 11、Opera 等现代浏览器(还有人在用吗?)会阻止您从“非 FILE:/// URI”(如 HTTP、HTTPS)导航到基于“file:///”的 URI,但如果无法访问,您可以尝试将 URL 写入页面(您可以尝试 window.location,如果出现错误,则写入页面并要求用户复制 URL 并将其粘贴到浏览器的地址栏中)。优点:您不需要要求安装任何东西。缺点:用户总是必须在浏览器地址栏上复制和粘贴内容。

注册 SMB:// URL 协议是可以的,但是我们的朋友提供的脚本假定您具有“管理员”级别的访问权限,并且每次您尝试引用此协议时,浏览器都会提示(当然,除非您更改设置,否则它不会询问这个特定的协议。)。

REG 脚本的一个解决方法是替换:

HKCR 与 HKCU\Software\Classes ...当前用户的“PATH”环境变量(不需要管理员访问权限即可更改)位于:Windows 注册表中的 HKCU\Environment。(您编辑“路径”REG_SZ 或 REG_EXPAND_SZ 值。)

如果您拥有“管理员”权限,则可以右键单击提供的批处理脚本(.bat 或 .cmd 文件),然后选择“以管理员身份运行”菜单选项...该选项已翻译(本地化)为不同的语言,但了解此菜单选项的最简单方法是查看选项左侧的盾牌图标。优点:用户无需一直复制和粘贴内容...缺点:用户必须安装内容。此外,URL 协议可能包含漏洞,包括但不限于浏览器安全绕过,允许它们自动被调用或代码/参数注入,这可能会导致混乱、系统受损等。

注意:已在 Chrome、Firefox 和 IE 11 上成功测试。Edge 似乎不支持所有网络路径(本地路径可以,但同样无法从远程位置导航到本地文件夹或文件)

希望这能进一步帮助并澄清;)

相关内容