Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何添加上下文菜单选项以在给定的工作目录中启动程序_R_Windows_Registry_Contextmenu_Right Click - Fatal编程技术网

R 如何添加上下文菜单选项以在给定的工作目录中启动程序

R 如何添加上下文菜单选项以在给定的工作目录中启动程序,r,windows,registry,contextmenu,right-click,R,Windows,Registry,Contextmenu,Right Click,在windows上安装Git时,当您右键单击文件夹到“Git Bash Here”时,它会添加一个上下文菜单选项。其方法是添加如下注册表项: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\git_shell\command] @="\"C:\\Program Files\\Git\\git-bash.exe\" \"--cd=%1\"" 注意末尾的cd参数,它将目录名传递给程序 我想为R(和其他

在windows上安装Git时,当您右键单击文件夹到“Git Bash Here”时,它会添加一个上下文菜单选项。其方法是添加如下注册表项:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\git_shell\command]
@="\"C:\\Program Files\\Git\\git-bash.exe\" \"--cd=%1\""
注意末尾的
cd
参数,它将目录名传递给程序

我想为R(和其他程序)做一些类似的事情。不幸的是,R不接受
cd
参数。这将启动R:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\R\command]
@="\"C:\\Program Files\\R\\R-3.4.3\\bin\\x64\\Rgui.exe\" \"--cd=%1\""
但它会给出一条错误消息,指出
cd
参数无法识别,并且Rgui将以默认工作目录开始,这将破坏整个要点

我真正想让它做的是等效于此命令:

start "R" /D %1 "C:\Program Files\R\R-3.4.3\bin\x64\Rgui.exe"

其中
%1
是右键单击的文件夹。这可能吗?

您可以编写在启动时运行的R代码,并检查命令行参数。 您可以将以下代码放在
C:\Program Files\R\R-3.4.3\etc\R profile.site
(或启动时执行的任何其他文件)的末尾:

本地({

processArg您可以编写在启动时运行的R代码,并检查命令行参数。 您可以将以下代码放在
C:\Program Files\R\R-3.4.3\etc\R profile.site
(或启动时执行的任何其他文件)的末尾:

本地({

processArg可能是对的更好的问题可能是对的更好的问题
local({

  processArg <- function(arg) {
    parts <- strsplit(arg, "=")[[1]]
    if (length(parts) == 2) {
      if (parts[1] == "R_startup_wd") {
        setwd(parts[2])
      }
    }
  }

  invisible(sapply(commandArgs(FALSE), processArg))
})