一位朋友緊急求助:系統是windows這位朋友因為桌面沒有OFFICE圖標又急著要用WORD就把一個桌面圖標右擊選擇打開方式中選擇了word而且沒有把“始終使用這種程序打開同類型文件”前的勾去掉這一改之後結果所有的快捷方式全變成了word文檔了可以再改成別的比如再改為記事本方式打開但就是沒有辦法恢復原狀
這是一個文件關聯的問題這樣的問題在xp下根本就不可能發生看來這個具體問題是win下的新問題網上大致搜了一下發現出現這樣問題的決不只是這位朋友看來有解決的必要
為了解決這個問題我們需要先談一下文件關聯的一些基本的知識這樣才能使朋友們做到知其然而知其所以然
文件關聯主要的是把文件類型與開放式命令關聯起來而windows是通過文件的擴展名來識別文件類型的這就首先需要把擴展名與文件類型關聯起來
assoc命令
要修改擴展名與文件類型的關聯我們需要用到一個命令assoc點開始搜索輸入cmd打開cmd在cmd中輸入assoc /?回車我們可以得到關於這個命令的幫助
assoc命令的作用有兩個一是顯示擴展名與文件類型的關聯一是改寫擴展名與文件類型的關聯 讓我們以快捷方式的關聯為例來講述這個問題
快捷方式的擴展名是lnk在windows下這個擴展名一般是不會顯現出來的如果出現了必是它的文件關聯出問題了
我們在cmd中輸入assoc lnk回車我們可以得到的命令結果是lnk=lnkfile
這個命令結果顯示了擴展名lnk與文件類型lnkfile是相關聯的凡是擴展名為lnk的文件都屬於lnkfile這個文件類型
現在讓我們輸入命令
assoc lnk=lnk回車lnk這個擴展名與文件類型的關聯就被改寫了然後我們再輸入命令
assoc lnk
回車我們得到的命令結果將是:
lnk=lnk
這個結果顯示了擴展名lnk已經是與文件類型lnk相關聯而不再是與lnkfile相關聯這個時候你去桌面上去看一下吧你桌面上所有的快捷方式的後綴名lnk全部顯示出來了所有的快捷方式都不再可用雙擊時會提示windows無法打開此文件
現在再讓我們輸入
assoc lnk=lnkfile
回車我們將會發現一切又恢復了原狀
總之如果是快捷方式的擴展名與文件類型之間的關聯出現了問題我們只需要輸入
assoc lnk=lnkfile
回車後即可以解決問題
這樣如果我們知道一種擴展名所屬的正確的文件類型當這種擴展名與文件類型之間的關聯出現問題的時候我們只需要輸入
assoc ext=filetype
回車即可
這個ext代表的是文件擴展名比如lnk這個filetype代表的是文件類型比如lnkfile如果我們不知道一種擴展名所關聯的文件類型是什麼我們只需要在cmd中輸入assoc ext回車我們就能得到它所關聯的文件類型是什麼
每一個注冊了的擴展名都會在注冊表中存在著一個對應的注冊表項
HKEY_CLASSES_ROOText
這裡的ext代表的是擴展名比如快捷方式對應的項就是
HKEY_CLASSES_ROOTlnk
這個項有一個默認的值這個默認的值的數據就是這個快捷方式所關聯的文件類型因而assoc命令主要的就是修改這個項的默認值的數據但需要注意的是assoc命令所修改的內容並不僅僅是這個項的默認值的數據它還會要修改其它的一些方面所以我們直接在注冊表中改這個值的數據並不能完全代替assoc命令
fytpe命令
我們現在知道了如何把擴展名與文件類型關聯起來了進一步地需要知道的是如何把文件類型與開放式命令關聯起來比如txt擴展名所關聯的文件類型是txtfile而txtfile正常的情形下總是用notepadexe(記事本)來打開的這個notepadexe就是打開txtfile文件類型的開放式命令
如何來修改這種文件類型與開放式命令之間的關聯呢?這需要用到另外的一個重要的命令ftype
讓我們在cmd中輸入
ftype /?
回車我們可以得到這個命令的幫助
ftype命令有兩個作用一是顯示文件類型與開放式命令之間的關聯一是改寫文件類型與開放式命令之間的關聯
如果我們想知道一種文件類型與什麼樣的開放式命令相關聯我們只需要在cmd中輸入
ftype fileType
回車我們就能夠得到我們想要得到的結果這個fileType代表的是指定的文件類型比如lnkfile
讓我們輸入ftype lnkfile
回車正常情形下我們得到的命令結果是沒有找到文件類型“lnkfile”或者與其相關的開放式命令這個結果表明了正常的情形下lnkfile是沒有與任何開放式命令相關聯的
讓我們輸入ftype lnkfile=notepadexe
回車讓我們再輸入
ftype lnkfile
回車我們將得到的命令結果是
lnkfile=notepadexe
這個結果表明了文件類型lnkfile就與開放式命令notepadexe關聯上了
這種情形下仍然並不會影響快捷方式的打開
那麼如何來清除這個關聯並且不與其它的開放式命令關聯呢?我們只要輸入
ftype lnkfile=
回車即可在xp下這個命令無效但是我們可以在xp下輸入
ftype lnkfile=
回車這個命令與前一個命令在外表上幾乎看不出分別分別就在於前一個命令在=後面沒有空格而後一個命令在=後有一個空格
讓我們輸入
ftype txtfile
回車正常情形下我們可以得到的命令結果是
txtfile="%SystemRoot%systemNOTEPADEXE" %
這個結果表明了文件類型txtfile與開放式命令txtfile="%SystemRoot%systemNOTEPADEXE" %相關聯
如果一種文件類型與開放式命令之間的關聯出現了問題而我們知道正確的開放式命令是什麼這時我們只需要在cmd中輸入如下命令並回車即可修復
ftype fileType=openCommandString
這裡fileType代表的是指定的文件類型比如txtfile這裡openCommandString代表的是開放式命令比如notepadexe
如果我們的txtfile與開放式命令之間的關聯出了問題我們只需要在cmd中輸入
ftype txtfile="%SystemRoot%systemNOTEPADEXE" %
回車這樣我們也就修復了txtfile文件類型與它的開放式命令之間的關聯
所謂開放式命令其實就是對這種文件類型的打開方式
每一種注冊了的文件類型在注冊表中都會存在著它的一個對應的注冊表項
這個注冊表項就是
HKEY_CLASSES_ROOTfiletype
這個filetype代表的是文件類型比如batfile文件類型所對應的注冊表項就是
HKEY_CLASSES_ROOTbatfile
ftype命令所修改的注冊表項主要就是HKEY_CLASSES_ROOTfiletypeshell
opencommand這個項的默認值的數據
但需要注意的是ftype命令所修改的並不僅僅是這個默認值的數據因而直接在注冊表中修改這個數據並不能代替ftype命令的修改
當然ftype命令所修改的全部的東西都可以在注冊表中找到但是我們那樣一一地去找遠不如用ftype命令簡單修改來得爽
右鍵打開方式
前面我們談到了擴展名與文件類型的關聯文件類型與開放式命令的關聯(也就是文件的打開方式)看起來好象我們關於文件關聯的問題就談完了
實則不然還有另外的一個重要的方面我們沒有談到這就是我們右擊一個文件選擇打開方式(並不是所有文件右鍵都有打開方式這個選項的)然後我們選擇一個程序並把“始終使用這種程序打開同類型文件”前的勾選上點確認比如本文開頭的那位朋友把所有快捷方式都選擇以word程序打開一樣這樣之後這個文件類型也就與這個開放式命令關聯起來了
ftype命令是修改文件類型與開放式命令的關聯的而右鍵打開方式也可以修改文件類型與開放式命令的關聯這二者的關系是什麼呢?
我們發現ftype命令和右鍵打開方式這二者所修改的注冊表項是不同的Ftype命令所修改的注冊表項是
HKEY_CLASSES_ROOTfiletype
這個filetype代表的是文件類型比如HKEY_CLASSES_ROOTlnkfile
而右鍵打開方式所修改的主要注冊表項是
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion
ExplorerFileExtsext
這個ext代表的是文件擴展名比如
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion
ExplorerFileExtslnk
按照我的理解ftype命令所修改的內容屬於系統設置而右鍵打開方式所修改的內容則屬於用戶設置這二者所設置的實際對象是一樣的當二者不一致的時候用戶設置優先於系統設置
三個注冊表項
總之文件關聯所涉及到的注冊表項主要是三個
HKEY_CLASSES_ROOText
HKEY_CLASSES_ROOTfiletype
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion
ExplorerFileExtsext
問題解決
現在要回到我們在開頭所說到的問題了
我教那位朋友首先輸入
assoc lnk
返回的命令結果是
lnk=lnkfile
這表明擴展名lnk與文件類型lnkfile之間的關聯沒有問題
我再要他輸入
ftype lnkfile
返回的命令結果是
沒有找到文件類型“lnkfile”或者與其相關的開放式命令而這個結果是正常的這表明系統設置中的lnkfile與開放式命令之間的關聯也沒有問題
那麼問題只能出在用戶設置中的lnkfile與開放式命令之間的關聯出現了問題一般的情形下右鍵打開方式的設置優先於ftype命令對文件關聯的設置這在xp和win下都是一樣的但對於擴展名為lnk的快捷方式二者卻具有不同在win下即便是對於lnk快捷方式也是右鍵打開方式的設置優先於ftype命令的設置
找到了問題所在我們就可以知道對於這種快捷方式的文件關聯錯誤我們用assoc和ftype命令都是無法解決的解決的辦法就是
在注冊表中右鍵刪除下面這個注冊表項
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion
ExplorerFileExtslnkUserChoice
這個注冊表項下的值和數據(具體就是名為progid的值和它的數據)是對應右鍵打開方式所設置的默認打開程序的
在刪除後重啟電腦或者重啟explorer問題完美得到解決
除了這種解決辦法其它的解決辦法暫時沒有找到
順便說一下在XP下UserChoice這個注冊表項是沒有的
由於一些文件右鍵沒有打開方式選項在xp下我們可以在我的電腦裡面點工具查看文件夾選項文件類型這裡我們可以進行同樣的設置而在win下我們可以在控制面板程序默認程序始終使用指定的程序打開此文類型裡面進行設置xp下設置的可選項要多得多而win下則的設置則極為簡明限於篇幅具體的設置就不講了
From:http://tw.wingwit.com/Article/Common/201311/5909.html