首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从注册表添加最新的R安装路径到路径windows 7/8/10

从注册表添加最新的R安装路径到路径windows 7/8/10
EN

Stack Overflow用户
提问于 2016-01-12 12:36:58
回答 2查看 2.3K关注 0票数 3

嗨,我是windows batch的新手。

我想向同事发送一个runMe.bat文件,调用Rscript myRfile.R来处理一些数据文件。但我的同事以安装R而闻名,我不能指望他们知道如何将Rscript添加到PATH中,甚至在R中编写代码。

我希望.bat文件查找最新安装的R的路径,并将该目录\bin\i 386\临时添加到path。

我想:

  • 注册中心( iterate the subfolders of HKEY_LOCAL_MACHINE\Software\Rcore\R\ )查找上一个和最新的R-版本文件夹
  • in this registry subdirectory get the **installPath** e.g. keyValue = "c:\R\R-3.2.2\"
  • concatenate with "\bin\i386\" -> c:\R\R-3.2.2\bin\i386\ ->Rpath
  • PATH%PATH%;Rpath
  • Rscript myRfile.R

我希望Rpath不是永久地添加到PATH中。我的同事可能有相当有限的窗口管理员特权。

非常感谢!

奖励:我的公司主要安装32位Windows操作系统,但在不久的将来会进行升级。我不介意只执行R i386版本。运行时和内存req。非常谦虚。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-12 17:18:40

我想像下面这样的东西会做你想做的事:

代码语言:javascript
复制
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS
SET RKEY=
SET RPATH=
FOR /F "tokens=* skip=2" %%L IN ('reg.exe QUERY HKLM\Software\R-core\R /f * /k ^| sort') DO (
    IF NOT "%%~L"=="" SET "RKEY=%%~L"
)
IF NOT DEFINED RKEY (
    ECHO Unable to qyery registry key HKLM\Software\Rcore\R
    EXIT /B 1
)
FOR /F "tokens=2* skip=2" %%A IN ('REG QUERY %RKEY% /v "installPath"') DO (
    IF NOT "%%~B"=="" SET "RPATH=%%~B"
)
IF NOT DEFINED RPATH (
    ECHO Unable to query registry value %RKEY%\installPath
    EXIT /B 2
)
IF NOT EXIST "%RPATH%" (
    ECHO Found path for R (%RPATH%^) does not exist
    EXIT /B 3
)
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
    SET "PATH=%RPATH%\bin\x64;%PATH%"
) ELSE (
    SET "PATH=%RPATH%\bin\i386;%PATH%"
)
Rscript myscript.r

首先,我们启用“本地”模式,以便在批处理文件退出时,我们设置的所有变量都将恢复(即使您使用“调用”来调用它)。接下来,我们取消使用的两个变量,以便测试它们是否由以后的代码设置。

第一个for循环将在每个结果下执行一次,因此RKEY最终设置为\R下的最后一个键,并且排序将希望对它们进行排序,这样最新的安装将在最后结束。内部if语句只是为了确保空白行被忽略。

接下来是一个基本的错误检查,以确保设置了rkey (如果注册表项不存在,用于ex)。

下一个for循环应该只迭代一次,并且只从选定键中的installPath值中提取值部分。for只是用来跳过不相关的行和标记。然后测试是否找到了该值,以及所发现的值是否实际存在。

最后,根据架构更新路径,并运行脚本。

票数 2
EN

Stack Overflow用户

发布于 2016-01-13 15:55:50

由于@Extrarius,我更正了代码,以便它应该第一次运行。我被拒绝这样做作为编辑。

代码语言:javascript
复制
@ECHO OFF
ECHO Searching for install path of latest version of R in registry...
SETLOCAL ENABLEEXTENSIONS REM This line will reset path when return
SET RKEY=
SET RPATH=
FOR /F "tokens=* skip=2" %%L IN ('reg.exe QUERY HKLM\Software\R-core\R /f * /k ^| sort') DO (
    IF NOT "%%~L"=="" SET "RKEY=%%~L"
)
IF NOT DEFINED RKEY (
    ECHO Unable to query registry key HKLM\Software\R-core\R
    EXIT /B 1
)
FOR /F "tokens=2* skip=2" %%A IN ('REG QUERY %RKEY% /v "installPath"') DO (
    IF NOT "%%~B"=="" SET "RPATH=%%~B"
)
IF NOT DEFINED RPATH (
    ECHO Unable to query registry value %RKEY%\installPath
    EXIT /B 2
)
IF NOT EXIST "%RPATH%" (
    ECHO Found path for R (%RPATH%^) does not exist
    EXIT /B 3
)
SET OLDPATH=%PATH%
IF "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
    SET PATH=%RPATH%\bin\x64;%OLDPATH%
    ECHO Found %RPATH%\bin\x64
) ELSE (
    SET PATH=%RPATH%\bin\i386;%OLDPATH%
    ECHO Found %RPATH%\bin\i386
)

Rscript myscript.R
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34743899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档