如何在Windows资源管理器和命令行

时间:2016-01-25 13:38:26

标签: windows

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

到目前为止,我已经为windows explorer的sublime文本设置了默认程序,所以脚本打开就好了。

在命令行中我已设置

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

E:\projects\Ruby>ftype Ruby.File
Ruby.File=C:\bin\ruby200\bin\ruby.exe "%1" %*

此外,我已将.RB设置为PATHEXT环境变量,因此我只需键入脚本的名称。但问题是,当我这样做时,它会启动Sublime Text而不是运行脚本。

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

那么可以有2种不同的默认程序吗?一个表单命令行,当我双击某个脚本时,另一个表单是Windows资源管理器?

1 个答案:

答案 0 :(得分:3)

使用GUI并不容易,但可以通过命令行完成。首先,您必须使您的关联动态。为此,您必须对包含REG_EXPAND_SZ文件关联的注册表项使用.rb值类型。 REG_EXPAND_SZ不会按字面意思使用,而是扩展(=环境变量替换为实际值)。您可以使用assoc创建关联,但之后必须使用reg add进行更改,因为默认类型为REG_SZ。程序路径必须是这样的:

%RUBY_PROGRAM% "%1" %*

其中%RUBY_PROGRAM%的名称 - 到目前为止 - 不是现有的环境变量。现在,您可以为该变量提供默认值:

setx RUBY_PROGRAM c:\windows\notepad.exe

现在关闭命令提示符并转到其属性(从GUI)。作为替代方案,您可以为已修改的命令提示符创建新的快捷方式。要执行的命令必须是这样的:

%comspec% /k ""c:\setup_ruby.bat""

/k允许您在启动时执行给定的批处理文件,在该批处理中,您只需为%RUBY_PROGRAM%环境变量设置不同的值:

SET RUBY_PROGRAM=C:\bin\ruby200\bin\ruby.exe

现在每次运行该特殊快捷方式时,您都将直接执行Ruby程序。如果您不想创建特殊的快捷方式,并且希望将此规则应用于每个命令提示符(无论它在何处打开),那么您可以向HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun注册表添加条目键。

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