2017-08-09 58 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