[?]註冊檔內如何使用通用語法





purk
2008-03-29, 04:47 PM
有些檔案在windwos或winnt資料夾內

加入註冊檔的時候

可以使用%SystemRoot%來取代

(%windie%好像也可以 沒詳細測試過)

但是放在program files 的目前測試都要寫完整名稱

造成一些遷移上的小麻煩

不知有沒有辦法使用類似%%的變數來達到可以變化目標的方式


這邊有點奇怪

以OFFICE預設安裝的方式

是允許以下的寫法

%ProgramFiles%\Microsoft Office\Office10\OUTLOOK.EXE

但是當我自己要增加右鍵開啟項目__例如__以IE開啟檔案

以下寫法

%ProgramFiles%\Internet Explorer\IEXPLORE.EXE "%1"

就會造成無法開啟

會顯示存取被拒

除非寫上

D:\Program Files\Internet Explorer\IEXPLORE.EXE "%1"

(我的XP預設在WINNT.sif安裝時 就指定Program Files放到D)

謝謝




flair
2008-03-29, 08:21 PM
從來不佑道這個語法,感謝分享....

琥珀
2008-03-29, 09:43 PM
批次檔範例:reg add "hkcr\txtfile\shell\open\command" /ve /t reg_expand_sz /d "%%programfiles%%\internet explorer\iexplore.exe \"%%1\"" /f

purk
2008-04-01, 01:14 AM
琥珀兄

這是我的reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\OpenInIE]
@="使用Internet Explorer開啟"

[HKEY_CLASSES_ROOT\*\shell\OpenInIE\Command]
@="%ProgramFiles%\\Internet Explorer\\iexplore.exe \"%1\""


如果使用變數的話

會造成無法用右鍵開啟文件

會顯示存取被拒

以上

謝謝

琥珀
2008-04-01, 11:05 AM
要用可擴展字串值,不能用一般的字串值。用指令做一個,重新編輯內容,匯出 reg 檔案。

threesecond
2008-04-07, 05:31 PM
我剛剛測試了一下,用
"%ProgramFiles%\Internet Explorer\iexplore.exe" "%1"
會出現存取被拒,用
"C:\Program Files\Internet Explorer\iexplore.exe" "%1"
則正常。
匯出登錄檔則是長成這樣:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\Open in IE\command]
@="\"C:\\Program Files\\Internet Explorer\\iexplore.exe\" \"%1\""


我也很想知道能否用環境變數達成這個目的?

琥珀
2008-04-07, 08:43 PM
需要展開的變數,一律用 reg_expand_sz 就是了。用 reg_sz 是不會展開任何環境變數的。

坦白地說,reg_sz 就是用來存放靜態的字串,那些 %windir% 什麼的名稱,在此不叫變數。

purk
2008-04-09, 09:00 AM
琥珀兄

我使用這樣匯入

reg add "hkcr\*\shell\OpenInIE2\command" /ve /t reg_expand_sz /d "%%programfiles%%\internet explorer\iexplore.exe \"%%1\"" /f


匯入成功後

regedit後看到的是

%D:\Program Files%\internet explorer\iexplore.exe "%%1"

匯出是長成這樣

[HKEY_CLASSES_ROOT\*\shell\OpenInIE\command]
@=hex(2):25,00,44,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,20,\
00,46,00,69,00,6c,00,65,00,73,00,25,00,5c,00,69,00,6e,00,74,00,65,00,72,00,\
6e,00,65,00,74,00,20,00,65,00,78,00,70,00,6c,00,6f,00,72,00,65,00,72,00,5c,\
00,69,00,65,00,78,00,70,00,6c,00,6f,00,72,00,65,00,2e,00,65,00,78,00,65,00,\
20,00,22,00,25,00,25,00,31,00,22,00,00,00


實際使用上

一樣'存取被拒'

謝謝

琥珀
2008-04-09, 03:13 PM
先在批次檔裡面寫好,再執行。

直接鍵入指令執行,有兩個地方要注意。一個是 % 不用重複,另一個是捨棄 %programfiles% 變數,不然 cmd 會自動轉換一次,變成如上述的情形,而用批次檔模式執行就不會有這個問題。

http://img516.imageshack.us/img516/1825/regnx2.png