我有一些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资源管理器?
答案 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资源管理器)。