2017-08-09 51 views
0

我使用一个批处理文件使用REG QUERY确定R的InstallPath确定安装路径:使用REG QUERY

@echo off 

REM get path 
for /f "tokens=2*" %%a in ('REG QUERY "HKCU\Software\R-Core\R64" /v InstallPath') do set "RPath=%%~b" 

set "var=\bin\R.exe --no-save" 
set "R=%RPath%%var%" 

REM start R fed with a script 
%R% < "path.to.some.rfile.r" 

过去,这很好地工作,直到我更新R键3.4.1版本里面写的InstallPath关键到Windows注册表中的子文件夹。

由于这个子文件夹是由R的版本命名的,我希望批处理文件独立于R版本工作,我想从任何现有的子文件夹获得InstallPath。我怎么能这样做?

回答

1

通过在执行reg命令行工具时指定query /s命令行开关,可以递归查询注册表项及其子项的所有值。以下批处理脚本检索在注册表项HKCU\Software\R-Core\R64或其任何子项中找到的名为InstallPath的第一个注册表值的数据。

@echo off 

set "key=hkcu\software\r-core\r64" 
set "scr=path.to.some.rfile.r" 
set "val=installpath" 
set "bin=bin\r.exe" 
set "arg=--no-save" 
set "rPath=" 

:: Retrieve the installation directory path of R from the registry 
for /f "tokens=2,*" %%i in ('reg query "%key%" /v "%val%" /s') do (
    if not defined rPath (
    set "rPath=%%~j" 
) 
) 
set "r=%rPath%\%bin% %arg%" 

:: The contents of some script file is fed to the standard input stream of R 
%r% 0<"%scr%" 

根据R如何将自己安装,你也可以尝试使用where命令检索R二进制的,而不是从注册表中查询值的完全限定路径。

for /f "delims=" %%e in ('where r') do set "r=%%~e" 
+0

不幸的是'哪里'不工作,但你的批处理脚本就像一个魅力。 – smoff