如何在Windows中使用Rscript.exe运行R脚本时更改工作目录

时间:2018-04-13 09:42:04

标签: r batch-file rscript

我想在Windows机器上使用Rscript.exe执行R脚本myscript.R。但是,我的默认主文件夹配置为\\\\<domain>/home/m/myname/Documents。我在run.bat所在的同一文件夹(实际上是pendrive中的文件夹)上创建了一个包装DOS批处理脚本(myscript.R),以使其成为当前的工作目录:

@ECHO OFF
REM This batch file is an interface to run R scripts from the command line

SET RSCRIPT="c:\Program Files\R\R-3.4.3\bin\Rscript.exe"

echo "Changing drive and directory to %~dp0"

pushd "%~dp0"

REM we change "\" to "/"
setlocal enabledelayedexpansion
set f=%*
set "f=!f:\=/!"

%RSCRIPT% %f%

popd

我通过run.bat "myscript.R" --dir ../AnotherFolder

调用脚本

到目前为止,这么好。但是,问题是脚本需要将工作文件夹更改为一级(../AnotherFolder)文件夹,但setwd() R函数失败。通过调试,我可以看到问题是Rscript.exe加载脚本myscript.R,同时仍然将默认目录设置为主文件夹。

问题是:我怎么能让Rscript.exe忽略默认的主目录并将脚本目录作为当前的工作目录。

1 个答案:

答案 0 :(得分:0)

好的,我整天都在摸不着头脑后找到了自己的答案。我修改了包装批处理文件并添加了一个额外的命令行参数--drive以供我的R脚本处理:

@ECHO OFF
REM This batch file is an interface to run R scripts from the command line

SET RSCRIPT="c:\Program Files\R\R-3.4.3\bin\Rscript.exe"

echo "Changing drive and directory to %~dp0"

pushd "%~dp0"

REM we change "\" to "/"
setlocal enabledelayedexpansion
set f=%*
set "f=!f:\=/!"

set P=%~dpnx1

%RSCRIPT% %f% --drive "%P:~0,2%"

popd

然后,我的R脚本必须执行setwd(drive),其中drive包含通过--drive选项传递的值(例如&#34; F:&#34;),然后执行{ {1}}在当前文件夹的相对路径上。