Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Windows 7系統教程 >> win7系統基礎知識 >> Win7文件關聯 文件與程序“聯姻”(2)

Win7文件關聯 文件與程序“聯姻”(2)

日期:2017/1/24 14:24:17      編輯:win7系統基礎知識
如果我們想知道一種文件類型與什麼樣的開放式命令相關聯,我們只需要在cmd中輸入:ftypefileType,按下回車鍵,我們就能夠得到我們想要得到的結果。
  
  這個fileType代表的是指定的文件類型,比如lnkfile,我們輸入:ftypelnkfile,按下回車鍵,正常情形下我們得到的命令結果是:沒有找到文件類型“lnkfile”或者與其相關的開放式命令,這個結果表明正常的情形下,lnkfile是沒有與任何開放式命令相關聯的。
  
  讓我們輸入:ftypelnkfile=notepad.exe,按下回車鍵,再輸入:ftypelnkfile,按下回車鍵,我們將得到的命令結果是:lnkfile=notepad.exe這個結果表明了:文件類型lnkfile就與開放式命令notepad.exe關聯上了。
  
  這種情形下,仍然並不會影響快捷方式的打開。那麼,如何來清除這個關聯,並且不與其它的開放式命令關聯呢?我們只要輸入:ftypelnkfile=,然後回車即可。
  
  在xp下,這個命令無效,但是,我們可以在xp下輸入:ftypelnkfile=,按下回車鍵,這個命令與前一個命令在外表上幾乎看不出區別,區別就在於,前一個命令在=後面沒有空格,而後一個命令在=後有一個空格。
  
  讓我們輸入:ftypetxtfile,按下回車鍵,正常情形下,我們可以得到的命令結果是:txtfile="%SystemRoot%system32NOTEPAD.EXE"%1,這個結果表明了:文件類型txtfile與開放式命令txtfile="%SystemRoot%system32NOTEPAD.EXE"%1相關聯。
  
  如果一種文件類型與開放式命令之間的關聯出現了問題,而我們知道正確的開放式命令是什麼,這時我們只需要在cmd中輸入如下命令並回車即可修復:ftypefileType=openCommandString,這裡fileType代表的是指定的文件類型,比如txtfile,這裡openCommandString代表的是開放式命令,比如notepad.exe
  
  如果我們的txtfile與開放式命令之間的關聯出了問題,我們只需要在cmd中輸入:ftypetxtfile="%SystemRoot%system32NOTEPAD.EXE"%1,按下回車鍵,這樣我們也就修復了txtfile文件類型與它的開放式命令之間的關聯。
  
  所謂開放式命令,其實就是對這種文件類型的打開方式。每一種注冊了的文件類型,在注冊表中都會存在著它的一個對應的注冊表項,這個注冊表項就是:HKEY_CLASSES_ROOTfiletype,這個filetype代表的是文件類型,比如batfile文件類型所對應的注冊表項就是:HKEY_CLASSES_ROOTatfile,ftype命令所修改的注冊表項主要就是---HKEY_CLASSES_ROOTfiletypeshellopencommand---這個項的默認值的數據。
  
  但需要注意的是,ftype命令所修改的並不僅僅是這個默認值的數據。因而直接在注冊表中修改這個數據,並不能代替ftype命令的修改。
  
  當然,ftype命令所修改的全部的東西都可以在注冊表中找到,但是,我們那樣一一地去找,遠不如用ftype命令簡單修改來得爽。
  
  右鍵打開方式
  
  前面我們談到了擴展名與文件類型的關聯,文件類型與開放式命令的關聯(也就是文件的打開方式),看起來好象我們關於文件關聯的問題就談完了,實則不然,還有另外的一個重要的方面我們沒有談到。這就是我們右擊一個文件,選擇打開方式(並不是所有文件右鍵都有打開方式這個選項的),然後我們選擇一個程序,並把“始終使用這種程序打開同類型文件”前的勾選上,點確認。比如本文開頭的那位朋友,把所有快捷方式都選擇以Word程序打開一樣。這樣之後,這個文件類型也就與這個開放式命令關聯起來了。
  
  ftype命令是修改文件類型與開放式命令的關聯的,而右鍵打開方式也可以修改文件類型與開放式命令的關聯,這二者的關系是什麼呢?
  
  我們發現,ftype命令和右鍵打開方式,這二者所修改的注冊表項是不同的。Ftype命令所修改的注冊表項是:HKEY_CLASSES_ROOTfiletype,這個filetype代表的是文件類型,比如HKEY_CLASSES_ROOTlnkfile,而右鍵打開方式所修改的主要注冊表項是:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts.ext,這個.ext代表的是文件擴展名,比如:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts.lnk,按照我的理解,ftype命令所修改的內容屬於系統設置,而右鍵打開方式所修改的內容則屬於用戶設置,這二者所設置的實際對象是一樣的,當二者不一致的時候,用戶設置優先於系統設置。
  
  三個注冊表項
  
  總之,文件關聯所涉及到的注冊表項主要是三個:
  
  HKEY_CLASSES_ROOT.ext
  
  HKEY_CLASSES_ROOTfiletype
  
  HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts.ext
  
  問題解決
  
  現在要回到我們在開頭所說到的問題了。我教那位朋友首先輸入:assoc.lnk,返回的命令結果是:.lnk=lnkfile中,這表明,擴展名.lnk與文件類型lnkfile之間的關聯沒有問題。我再要他輸入:ftypelnkfile,返回的命令結果是:沒有找到文件類型“lnkfile”或者與其相關的開放式命令,而這個結果是正常的,這表明,系統設置中的lnkfile與開放式命令之間的關聯也沒有問題。
  
  那麼,問題只能出在用戶設置中的lnkfile與開放式命令之間的關聯出現了問題。一般的情形下,右鍵打開方式的設置優先於ftype命令對文件關聯的設置,這在xp和win7下都是一樣的,但對於擴展名為.lnk的快捷方式,二者卻具有不同。在Win7下,即便是對於.lnk快捷方式,也是右鍵打開方式的設置優先於ftype命令的設置。
  
  找到了問題所在,我們就可以知道,對於這種快捷方式的文件關聯錯誤,我們用assoc和ftype命令都是無法解決的。解決的辦法就是:
  
  在注冊表中右鍵刪除下面這個注冊表項:HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerFileExts.lnkUserChoice這個注冊表項下的值和數據(具體就是名為progid的值和它的數據),是對應右鍵打開方式所設置的默認打開程序的。
  
  在刪除後,重啟電腦,或者重啟explorer,問題完美得到解決。除了這種解決辦法,其它的解決辦法暫時沒有找到。
  
  順便說一下,在XP下,UserChoice這個注冊表項是沒有的。
  
  由於一些文件右鍵沒有打開方式選項,在xp下,我們可以在我的電腦裡面點工具----查看----文件夾選項---文件類型,這裡我們可以進行同樣的設置,而在Win7下,我們可以在----控制面板---程序---默認程序----始終使用指定的程序打開此文類型---裡面進行設置,xp下設置的可選項要多得多,而Win7下則的設置則極為簡明。
Copyright © Windows教程網 All Rights Reserved