![](/img/trans.png)
[英]For what are R for Windows' “Current Version” and “Install Path” registry entries used?
[英]add latest R installation path from registry to PATH windows 7/8/10
嗨,我是Windows批处理的新手。
我想将一个runMe.bat文件分发给同事调用Rscript myRfile.R
来处理一些数据文件。 但我的同事众所周知地安装了R各种各样的地方,我不能指望他们知道如何将Rscript添加到PATH甚至是在R中编码。
我想.bat文件查找最新安装的R的路径,并暂时将[该目录] \\ bin \\ i386 \\添加到PATH。
我想:
迭代注册表HKEY_LOCAL_MACHINE\\Software\\Rcore\\R\\
的子文件夹以查找最新和最新的R版本文件夹
in this registry subdirectory get the **installPath** eg 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。 无论如何,我的同事可能已经完全限制了Windows管理员权限。
非常感谢你!
奖金:我的公司主要有32位Windows操作系统安装,但会在不久的将来升级。 我不介意只执行R i386版本。 运行时和内存需求。 很谦虚。
我觉得像下面这样的东西会做你想要的:
@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
首先,我们启用“本地”模式,以便我们设置的所有变量将在批处理文件退出时恢复(即使您使用“CALL”调用它)。 接下来,我们取消设置使用的两个变量,因此我们可以测试它们是否由以后的代码设置。
第一个for循环将每个结果执行一次,因此RKEY最终设置为\\ R下的最后一个键,并且排序将有希望对它们进行排序,以使最新的安装最终结束。 内部if语句只是为了确保忽略空行。
接下来是一个基本的错误检查,以确保设置了rkey(如果注册表项不存在,则为ex)。
下一个for循环应该只迭代一次,并从选定键中的installPath值中仅提取值部分。 for仅用于跳过不相关的行和标记。 然后测试是否找到了值,以及找到的值是否确实存在。
最后,根据体系结构更新路径,然后运行脚本。
感谢@Extrarius, 我更正了代码,以便它应该第一次运行。 作为编辑,我被拒绝这样做。
@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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.