我正在尝试在我的本地计算机上为 IE9 中的Sublime Text创建一个 Web 协议。我跟着微软在这里添加协议指南。
不幸的是,我无法将command
密钥的注册表值直接链接到 sublime,因为协议sublime:
已附加到地址。因此,如果我键入sublime:test.txt
,则整个字符串将传递给 sublime,而 sublime 不知道如何处理它。
所以,我制作了一个快速批处理文件来清理字符串,subl.bat
.
@echo off
echo %1%
pause
set str=%1
set str=%str:sublime:=%
start "" CALL "C:\Program Files\Sublime Text 2\sublime_text.exe" "%str%"
echo %str%
pause
暂停仅用于调试,可以忽略。这个批处理文件只是去掉了sublime:
参数的一部分,然后调用 sublime 传递经过清理的参数。
现在,当我将command
注册表项更改为:
"C:\subl.bat" "%1"
然后在 Internet Explorer 中尝试,我得到了错误file path not found
。好吧,如果您尝试使用命令运行带有引号中的名称和引号中的参数的批处理文件start
,您实际上需要为窗口标题添加一个字符串并在其后插入CALL
命令,就像在我的批处理文件中一样。我的猜测是 Internet Explorer 正在使用start
命令或类似命令,并且由于两个参数都在引号中,因此它失败了。我尝试将值更改为:
"" CALL "C:\subl.bat" "%1"
和
CALL "C:\subl.bat" "%1"
但都没有奏效。但是,如果我删除周围的引号%1
并且参数没有空格,则协议有效!一旦参数和程序有引号,它就会中断。
我真的很想弄清楚为什么我不能在程序路径和参数中编写一个带有空格的协议处理程序(每个都用引号括起来)。有人有想法么?
如果您想对此进行测试,则无需每次更改注册表项时都重新启动计算机,因此很容易重现。
哦,该协议在 Firefox 中有效,但是test
如果2
文件是test 2.log
. 这是start
命令表现不正常的另一个实例,因为如果您查看我的批处理文件,我会将str
变量括在引号中,因此应该保留空格。如果我在与 sublime 相同的目录中打开提示符并使用命令行 arg 运行 sublime,则c:\test 2.log
sublime 正确打开只是test 2.log
,不是test
,2
所以我知道这是start
命令的问题。
编辑:我应该补充一点,我也尝试过对路径进行 URL 编码,因为 MSDN 说 URI 不应包含特殊字符,但这也不起作用。