1

我正在嘗試在本地計算機的IE9中爲Sublime Text創建一個Web協議。我跟着Microsoft's add a protocol guide hereWindows - 啓動命令和協議處理程序

不幸的是,我無法將command密鑰的註冊表值直接鏈接到崇高,因爲協議sublime:被追加到地址。所以,如果我輸入sublime:test.txt,那麼整個字符串就會傳遞給崇高,崇高不知道如何處理它。

於是,我做了一個快速批處理文件來消毒字符串,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命令運行名稱爲引號的引號中的批處理文件,並且使用start命令引用參數,則實際上需要爲窗口標題預先添加一個字符串,並在其後面插入CALL命令,就像在我的批處理文件中一樣。我的猜測是Internet Explorer使用start命令或類似的命令,並且由於兩個參數都在引號中,所以它失敗了。我已經試過的值更改爲:

"" CALL "C:\subl.bat" "%1" 

CALL "C:\subl.bat" "%1" 

但既不工作。但是,如果我刪除%1周圍的引號並且參數沒有空格,則該協議起作用!只要參數和程序有引號,就會中斷。

我真的想弄清楚爲什麼我不能寫在這兩個程序路徑和參數(周圍的每個引號)空格的協議處理程序。有人有主意嗎?

如果你想測試這一點,你不需要每次更改註冊表項時重新啓動電腦,這樣很容易繁殖。

哦,並且該協議在Firefox中可用,但如果文件是test 2.log,崇高會嘗試單獨打開test2。這是start命令的另一個例子,因爲如果您查看我的批處理文件,我會將str變量包含在引號中,以便保留空格。如果我在與sublime相同的目錄中打開提示並使用命令行運行崇高arg c:\test 2.log崇高正常打開只需test 2.log而不是test2因此我知道這是start命令的問題。

編輯:我要補充,我也試過,因爲MSDN說,URI不應包含特殊字符編碼路徑網址,但也不能工作。

回答

1

剛剛讀完,就會看到路徑被誤解了。這導致我相信這是一個報價問題。(由於批處理腳本喜歡引用[諷刺])我認爲你需要很多周圍的引用。

試試這個:(添加代字符,也是第2行不需要結尾%。) 圍繞set變量的引號允許值中的特殊字符。

@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 

隨着:(由一波浪號)

CALL "C:\subl.bat" "%~1" 

代字號~將從字符串(如果有的話)除去任何周圍的報價。