一位朋友紧急求助:系统是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下则的设置则极为简明限于篇幅具体的设置就不讲了 |