如何在windows资源管理器和命令行中设置不同的默认程序

如何在windows资源管理器和命令行中设置不同的默认程序,windows,Windows,我有一些ruby脚本,我想为同一个文件使用两个不同的默认程序,如果我在windows资源管理器中双击一个程序来编辑代码(例如在Sublime文本中),但是当我从命令行运行它时,我希望执行脚本。我正在使用Windows10 到目前为止,我已经为windows资源管理器升华文本设置了默认程序,所以脚本可以正常打开 在命令行中,我设置了 E:\projects\Ruby>assoc .rb .rb=Ruby.File 及 我还设置了.RBenPATHEXT环境变量,因此我只需键入脚本的名称。但

我有一些ruby脚本,我想为同一个文件使用两个不同的默认程序,如果我在windows资源管理器中双击一个程序来编辑代码(例如在Sublime文本中),但是当我从命令行运行它时,我希望执行脚本。我正在使用Windows10

到目前为止,我已经为windows资源管理器升华文本设置了默认程序,所以脚本可以正常打开

在命令行中,我设置了

E:\projects\Ruby>assoc .rb
.rb=Ruby.File

我还设置了
.RB
en
PATHEXT
环境变量,因此我只需键入脚本的名称。但问题是,当我这样做时,它会启动升华文本,而不是运行脚本

如果我从windows资源管理器中更改默认程序,它只从命令行运行,但如果我双击它,它当然不会打开升华文本


那么有可能有两个不同的默认程序吗?当我双击某个脚本时,一个窗体命令行和另一个窗体windows资源管理器?

使用GUI不容易,但可以通过命令行完成。首先,你必须让你的关系充满活力。为此,必须对包含
.rb
文件关联的注册表项使用
REG\u EXPAND\u SZ
值类型
REG_EXPAND_SZ
不会按字面意思使用,而是扩展(=用实际值替换环境变量)。您可以创建与assoc的关联,但是您必须使用
reg add
来更改它,因为默认类型是
reg\u SZ
。程序路径必须如下所示:

%RUBY_PROGRAM% "%1" %*
其中,
%RUBY\u PROGRAM%
是迄今为止不存在的环境变量的名称。现在可以为该变量指定默认值:

setx RUBY_PROGRAM c:\windows\notepad.exe
SET RUBY_PROGRAM=C:\bin\ruby200\bin\ruby.exe
现在关闭命令提示符并更改其属性(从GUI)。或者,您可以为修改后的命令提示符创建新的快捷方式。要执行的命令必须如下所示:

%comspec% /k ""c:\setup_ruby.bat""
/k
允许您在启动时执行给定的批处理文件,在该批处理中,您只需为
%RUBY\u PROGRAM%
环境变量设置一个不同的值:

setx RUBY_PROGRAM c:\windows\notepad.exe
SET RUBY_PROGRAM=C:\bin\ruby200\bin\ruby.exe
现在,每次运行这个特殊的快捷方式时,您都将直接执行Ruby程序。如果您不想创建特殊快捷方式,并且希望将此规则应用于每个命令提示符(无论其已打开在何处),则可以将一个条目添加到注册表项
HKEY\u LOCAL\u MACHINE\Software\Microsoft\command Processor\AutoRun


请注意,您可以将
ftype
放入启动脚本(同时提供退出批处理),但这将影响所有应用程序,直到您关闭命令行提示符(即使您从Windows资源管理器双击文件)。

为什么不只使用上下文菜单
用升华文本打开
作为资源管理器选项,并将文件关联保留为
ruby.exe
。这就是我在Python中的工作方式……我现在就是这样做的。但在我的电脑中,由于某种原因,我不记得“打开方式”选项中ruby可执行文件的路径,因此每次我都必须右键单击>“选择另一个应用程序”>“更多应用程序”>转到列表的末尾,选择“查找其他应用程序”>然后浏览ruby可执行文件。当我可以双击它时,似乎有很多步骤。不过,从命令行中,如果我有一个名为
test.rb
的脚本,我就可以编写
ruby test.rb
,而不仅仅是编写
test
。尽管如此,当我设置文件关联以使用ruby解释器打开时,这似乎是不必要的。