玩轉(zhuǎn)Windows7的文件關(guān)聯(lián)

2010/6/23 15:20:30    編輯:軟媒 - 笨笨     字體:【

Win7之家airtaxifl.com):玩轉(zhuǎn)Windows7的文件關(guān)聯(lián)

遇到一位朋友緊急求助:系統(tǒng)是windows7,這位朋友因?yàn)樽烂鏇](méi)有OFFICE圖標(biāo),又急著要用WORD,就把一個(gè)桌面圖標(biāo)右擊,選擇打開(kāi)方式中選擇了Word,而且沒(méi)有把“始終使用這種程序打開(kāi)同類(lèi)型文件”前的勾去掉。這一改之后,結(jié)果所有的快捷方式全變成了word文檔了?梢栽俑某蓜e的,比如再改為記事本方式打開(kāi),但就是沒(méi)有辦法恢復(fù)原狀。

這是一個(gè)文件關(guān)聯(lián)的問(wèn)題。這樣的問(wèn)題在xp下根本就不可能發(fā)生,看來(lái)這個(gè)具體問(wèn)題是Win7下的新問(wèn)題。網(wǎng)上大致搜了一下,發(fā)現(xiàn)出現(xiàn)這樣問(wèn)題的決不只是這位朋友,看來(lái)有解決的必要。

為了解決這個(gè)問(wèn)題,我們需要先談一下文件關(guān)聯(lián)的一些基本的知識(shí),這樣才能使朋友們做到知其然而知其所以然。

文件關(guān)聯(lián),主要的是把文件類(lèi)型與開(kāi)放式命令關(guān)聯(lián)起來(lái)。而windows是通過(guò)文件的擴(kuò)展名來(lái)識(shí)別文件類(lèi)型的,這就首先需要把擴(kuò)展名與文件類(lèi)型關(guān)聯(lián)起來(lái)。

assoc命令

要修改擴(kuò)展名與文件類(lèi)型的關(guān)聯(lián),我們需要用到一個(gè)命令:assoc

點(diǎn)開(kāi)始,搜索,輸入cmd,打開(kāi)cmd,在cmd中輸入:assoc /? 回車(chē)。我們可以得到關(guān)于這個(gè)命令的幫助。



assoc命令的作用有兩個(gè),一是顯示擴(kuò)展名與文件類(lèi)型的關(guān)聯(lián),一是改寫(xiě)擴(kuò)展名與文件類(lèi)型的關(guān)聯(lián)。

讓我們以快捷方式的關(guān)聯(lián)為例來(lái)講述這個(gè)問(wèn)題。

快捷方式的擴(kuò)展名是.lnk,在windows下,這個(gè)擴(kuò)展名一般是不會(huì)顯現(xiàn)出來(lái)的,如果出現(xiàn)了,必是它的文件關(guān)聯(lián)出問(wèn)題了。

我們?cè)赾md中輸入:assoc .lnk
回車(chē),我們可以得到的命令結(jié)果是:
.lnk=lnkfile
這個(gè)命令結(jié)果顯示了:擴(kuò)展名.lnk與文件類(lèi)型lnkfile是相關(guān)聯(lián)的。凡是擴(kuò)展名為.lnk的文件,都屬于lnkfile這個(gè)文件類(lèi)型。

現(xiàn)在讓我們輸入命令:
assoc .lnk=lnk
回車(chē)。.lnk這個(gè)擴(kuò)展名與文件類(lèi)型的關(guān)聯(lián)就被改寫(xiě)了。然后我們?cè)佥斎朊睿?
assoc .lnk
回車(chē)。我們得到的命令結(jié)果將是:
.lnk=lnk
這個(gè)結(jié)果顯示了,擴(kuò)展名.lnk已經(jīng)是與文件類(lèi)型lnk相關(guān)聯(lián),而不再是與lnkfile相關(guān)聯(lián)。

這個(gè)時(shí)候你去桌面上去看一下吧,你桌面上所有的快捷方式的后綴名.lnk全部顯示出來(lái)了,所有的快捷方式都不再可用。雙擊時(shí)會(huì)提示:windows無(wú)法打開(kāi)此文件。


現(xiàn)在再讓我們輸入:
assoc .lnk=lnkfile
回車(chē)。我們將會(huì)發(fā)現(xiàn),一切又恢復(fù)了原狀。

總之,如果是快捷方式的擴(kuò)展名與文件類(lèi)型之間的關(guān)聯(lián)出現(xiàn)了問(wèn)題,我們只需要輸入:
assoc .lnk=lnkfile

回車(chē)后即可以解決問(wèn)題。

這樣,如果我們知道一種擴(kuò)展名所屬的正確的文件類(lèi)型,當(dāng)這種擴(kuò)展名與文件類(lèi)型之間的關(guān)聯(lián)出現(xiàn)問(wèn)題的時(shí)候,我們只需要輸入:
assoc .ext=filetype
回車(chē)即可。
這個(gè).ext代表的是文件擴(kuò)展名,比如.lnk,這個(gè)filetype代表的是文件類(lèi)型,比如lnkfile。如果我們不知道一種擴(kuò)展名所關(guān)聯(lián)的文件類(lèi)型是什么,我們只需要在cmd中輸入:assoc .ext回車(chē)。我們就能得到它所關(guān)聯(lián)的文件類(lèi)型是什么。

每一個(gè)注冊(cè)了的擴(kuò)展名都會(huì)在注冊(cè)表中存在著一個(gè)對(duì)應(yīng)的注冊(cè)表項(xiàng):
HKEY_CLASSES_ROOT\.ext
這里的.ext代表的是擴(kuò)展名,比如快捷方式對(duì)應(yīng)的項(xiàng)就是:
HKEY_CLASSES_ROOT\.lnk
這個(gè)項(xiàng)有一個(gè)默認(rèn)的值,這個(gè)默認(rèn)的值的數(shù)據(jù),就是這個(gè)快捷方式所關(guān)聯(lián)的文件類(lèi)型。因而assoc命令,主要的就是修改這個(gè)項(xiàng)的默認(rèn)值的數(shù)據(jù)。但需要注意的是,assoc命令所修改的內(nèi)容,并不僅僅是這個(gè)項(xiàng)的默認(rèn)值的數(shù)據(jù),它還會(huì)要修改其它的一些方面。所以我們直接在注冊(cè)表中改這個(gè)值的數(shù)據(jù),并不能完全代替assoc命令。

fytpe命令

我們現(xiàn)在知道了如何把擴(kuò)展名與文件類(lèi)型關(guān)聯(lián)起來(lái)了,進(jìn)一步地需要知道的是如何把文件類(lèi)型與開(kāi)放式命令關(guān)聯(lián)起來(lái)。比如.txt擴(kuò)展名所關(guān)聯(lián)的文件類(lèi)型是txtfile,而txtfile正常的情形下,總是用notepad.exe(記事本)來(lái)打開(kāi)的,這個(gè)notepad.exe就是打開(kāi)txtfile文件類(lèi)型的開(kāi)放式命令。
如何來(lái)修改這種文件類(lèi)型與開(kāi)放式命令之間的關(guān)聯(lián)呢?這需要用到另外的一個(gè)重要的命令:ftype

讓我們?cè)赾md中輸入:
ftype /?  回車(chē)。我們可以得到這個(gè)命令的幫助。



ftype命令有兩個(gè)作用,一是顯示文件類(lèi)型與開(kāi)放式命令之間的關(guān)聯(lián),一是改寫(xiě)文件類(lèi)型與開(kāi)放式命令之間的關(guān)聯(lián)。

如果我們想知道一種文件類(lèi)型與什么樣的開(kāi)放式命令相關(guān)聯(lián),我們只需要在cmd中輸入:
ftype fileType
回車(chē)。我們就能夠得到我們想要得到的結(jié)果。這個(gè)fileType代表的是指定的文件類(lèi)型,比如lnkfile

讓我們輸入:ftype lnkfile
回車(chē)。正常情形下我們得到的命令結(jié)果是:
沒(méi)有找到文件類(lèi)型“lnkfile”或者與其相關(guān)的開(kāi)放式命令
這個(gè)結(jié)果表明了,正常的情形下,lnkfile是沒(méi)有與任何開(kāi)放式命令相關(guān)聯(lián)的。

讓我們輸入:ftype lnkfile=notepad.exe
回車(chē)。讓我們?cè)佥斎耄?
ftype lnkfile
回車(chē),我們將得到的命令結(jié)果是:
lnkfile=notepad.exe
這個(gè)結(jié)果表明了:文件類(lèi)型lnkfile就與開(kāi)放式命令notepad.exe關(guān)聯(lián)上了。
這種情形下,仍然并不會(huì)影響快捷方式的打開(kāi)。
那么,如何來(lái)清除這個(gè)關(guān)聯(lián),并且不與其它的開(kāi)放式命令關(guān)聯(lián)呢?我們只要輸入:
ftype lnkfile=
回車(chē)即可。在xp下,這個(gè)命令無(wú)效,但是,我們可以在xp下輸入:
ftype lnkfile=
回車(chē)。這個(gè)命令與前一個(gè)命令在外表上幾乎看不出分別,分別就在于,前一個(gè)命令在=后面沒(méi)有空格,而后一個(gè)命令在=后有一個(gè)空格。

讓我們輸入:
ftype txtfile
回車(chē)。正常情形下,我們可以得到的命令結(jié)果是:
txtfile="%SystemRoot%\system32\NOTEPAD.EXE" %1
這個(gè)結(jié)果表明了:文件類(lèi)型txtfile與開(kāi)放式命令txtfile="%SystemRoot%\system32\NOTEPAD.EXE" %1相關(guān)聯(lián)。

如果一種文件類(lèi)型與開(kāi)放式命令之間的關(guān)聯(lián)出現(xiàn)了問(wèn)題,而我們知道正確的開(kāi)放式命令是什么,這時(shí)我們只需要在cmd中輸入如下命令并回車(chē)即可修復(fù):
ftype fileType=openCommandString
這里fileType代表的是指定的文件類(lèi)型,比如txtfile,這里openCommandString代表的是開(kāi)放式命令,比如notepad.exe

如果我們的txtfile與開(kāi)放式命令之間的關(guān)聯(lián)出了問(wèn)題,我們只需要在cmd中輸入:
ftype txtfile="%SystemRoot%\system32\NOTEPAD.EXE" %1
回車(chē)。這樣,我們也就修復(fù)了txtfile文件類(lèi)型與它的開(kāi)放式命令之間的關(guān)聯(lián)。
所謂開(kāi)放式命令,其實(shí)就是對(duì)這種文件類(lèi)型的打開(kāi)方式。

每一種注冊(cè)了的文件類(lèi)型,在注冊(cè)表中都會(huì)存在著它的一個(gè)對(duì)應(yīng)的注冊(cè)表項(xiàng),這個(gè)注冊(cè)表項(xiàng)就是:
HKEY_CLASSES_ROOT\filetype
這個(gè)filetype代表的是文件類(lèi)型,比如batfile文件類(lèi)型所對(duì)應(yīng)的注冊(cè)表項(xiàng)就是:
HKEY_CLASSES_ROOT\batfile
ftype命令所修改的注冊(cè)表項(xiàng)主要就是---HKEY_CLASSES_ROOT\filetype\shell\open\command---這個(gè)項(xiàng)的默認(rèn)值的數(shù)據(jù)。
但需要注意的是,ftype命令所修改的并不僅僅是這個(gè)默認(rèn)值的數(shù)據(jù)。因而直接在注冊(cè)表中修改這個(gè)數(shù)據(jù),并不能代替ftype命令的修改。
當(dāng)然,ftype命令所修改的全部的東西都可以在注冊(cè)表中找到,但是,我們那樣一一地去找,遠(yuǎn)不如用ftype命令簡(jiǎn)單修改來(lái)得爽。

右鍵打開(kāi)方式

前面我們談到了擴(kuò)展名與文件類(lèi)型的關(guān)聯(lián),文件類(lèi)型與開(kāi)放式命令的關(guān)聯(lián)(也就是文件的打開(kāi)方式),看起來(lái)好象我們關(guān)于文件關(guān)聯(lián)的問(wèn)題就談完了,實(shí)則不然,還有另外的一個(gè)重要的方面我們沒(méi)有談到。這就是我們右擊一個(gè)文件,選擇打開(kāi)方式(并不是所有文件右鍵都有打開(kāi)方式這個(gè)選項(xiàng)的),然后我們選擇一個(gè)程序,并把“始終使用這種程序打開(kāi)同類(lèi)型文件”前的勾選上,點(diǎn)確認(rèn)。比如本文開(kāi)頭的那位朋友,把所有快捷方式都選擇以word程序打開(kāi)一樣。這樣之后,這個(gè)文件類(lèi)型也就與這個(gè)開(kāi)放式命令關(guān)聯(lián)起來(lái)了。

ftype命令是修改文件類(lèi)型與開(kāi)放式命令的關(guān)聯(lián)的,而右鍵打開(kāi)方式也可以修改文件類(lèi)型與開(kāi)放式命令的關(guān)聯(lián),這二者的關(guān)系是什么呢?
我們發(fā)現(xiàn),ftype命令和右鍵打開(kāi)方式,這二者所修改的注冊(cè)表項(xiàng)是不同的。Ftype命令所修改的注冊(cè)表項(xiàng)是:
HKEY_CLASSES_ROOT\filetype
這個(gè)filetype代表的是文件類(lèi)型,比如HKEY_CLASSES_ROOT\lnkfile
而右鍵打開(kāi)方式所修改的主要注冊(cè)表項(xiàng)是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext
這個(gè).ext代表的是文件擴(kuò)展名,比如:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.lnk
按照我的理解,ftype命令所修改的內(nèi)容屬于系統(tǒng)設(shè)置,而右鍵打開(kāi)方式所修改的內(nèi)容則屬于用戶(hù)設(shè)置,這二者所設(shè)置的實(shí)際對(duì)象是一樣的,當(dāng)二者不一致的時(shí)候,用戶(hù)設(shè)置優(yōu)先于系統(tǒng)設(shè)置。


三個(gè)注冊(cè)表項(xiàng)
總之,文件關(guān)聯(lián)所涉及到的注冊(cè)表項(xiàng)主要是三個(gè):
HKEY_CLASSES_ROOT\.ext
HKEY_CLASSES_ROOT\filetype
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ext


問(wèn)題解決
現(xiàn)在要回到我們?cè)陂_(kāi)頭所說(shuō)到的問(wèn)題了。
我教那位朋友首先輸入:
assoc .lnk
返回的命令結(jié)果是:
.lnk=lnkfile
這表明,擴(kuò)展名.lnk與文件類(lèi)型lnkfile之間的關(guān)聯(lián)沒(méi)有問(wèn)題。
我再要他輸入:
ftype lnkfile
返回的命令結(jié)果是:

沒(méi)有找到文件類(lèi)型“lnkfile”或者與其相關(guān)的開(kāi)放式命令

而這個(gè)結(jié)果是正常的,這表明,系統(tǒng)設(shè)置中的lnkfile與開(kāi)放式命令之間的關(guān)聯(lián)也沒(méi)有問(wèn)題。
那么,問(wèn)題只能出在用戶(hù)設(shè)置中的lnkfile與開(kāi)放式命令之間的關(guān)聯(lián)出現(xiàn)了問(wèn)題。
一般的情形下,右鍵打開(kāi)方式的設(shè)置優(yōu)先于ftype命令對(duì)文件關(guān)聯(lián)的設(shè)置,這在xp和win7下都是一樣的,但對(duì)于擴(kuò)展名為.lnk的快捷方式,二者卻具有不同。在win7下,即便是對(duì)于.lnk快捷方式,也是右鍵打開(kāi)方式的設(shè)置優(yōu)先于ftype命令的設(shè)置。


找到了問(wèn)題所在,我們就可以知道,對(duì)于這種快捷方式的文件關(guān)聯(lián)錯(cuò)誤,我們用assoc和ftype命令都是無(wú)法解決的。解決的辦法就是:
在注冊(cè)表中右鍵刪除下面這個(gè)注冊(cè)表項(xiàng):
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.lnk\UserChoice
這個(gè)注冊(cè)表項(xiàng)下的值和數(shù)據(jù)(具體就是名為progid的值和它的數(shù)據(jù)),是對(duì)應(yīng)右鍵打開(kāi)方式所設(shè)置的默認(rèn)打開(kāi)程序的。
在刪除后,重啟電腦,或者重啟explorer,問(wèn)題完美得到解決。
除了這種解決辦法,其它的解決辦法暫時(shí)沒(méi)有找到。
順便說(shuō)一下,在XP下,UserChoice這個(gè)注冊(cè)表項(xiàng)是沒(méi)有的。

由于一些文件右鍵沒(méi)有打開(kāi)方式選項(xiàng),在xp下,我們可以在我的電腦里面點(diǎn)工具----查看----文件夾選項(xiàng)---文件類(lèi)型,這里我們可以進(jìn)行同樣的設(shè)置,而在Win7下,我們可以在----控制面板---程序---默認(rèn)程序----始終使用指定的程序打開(kāi)此文類(lèi)型---里面進(jìn)行設(shè)置,xp下設(shè)置的可選項(xiàng)要多得多,而Win7下則的設(shè)置則極為簡(jiǎn)明。