这篇文章有很多相似之处:
R command line passing a filename to script in arguments (Windows)
此外,这篇文章与操作系统非常相关。我的回答仅适用于 Windows。
可能您正在寻找的是RScript.exe
而不是R.exe
. 后者对空格没有问题:path\to\RScript "My script.r"
.
一件无聊的事情可能是RScript
每次更新 R 时搜索或设置路径并执行此操作。
在我的搜索路径中的便利脚本中,我编写了一个小工具来运行 RScript 而不用担心路径。以防万一有人感兴趣:
@echo off
setlocal
::Get change to file dir par (-CD must be 1st par)
::================================================
Set CHANGEDIR="F"
If /I %1 EQU -cd (
Set CHANGEDIR="T"
SHIFT
)
::No args given
::=============
If [%1] EQU [] GoTo :USAGE
::Get R path from registry
::========================
:: may check http://code.google.com/p/batchfiles for updates on R reg keys
Call :CHECKSET hklm\software\R-core\R InstallPath
Call :CHECKSET hklm\software\wow6432Node\r-core\r InstallPath
if not defined RINSTALLPATH echo "Error: R not found" & goto:EOF
::Detect filepath when arg not starting with "-"
::==============================================
::Note the space after ARGS down here!!!
Set ARGS=
:LOOP
if [%1]==[] (GoTo :ELOOP)
Set ARGS=%ARGS% %1
::Echo [%ARGS%]
Set THIS=%~1
if [%THIS:~0,1%] NEQ [-] (Set FPATH=%~dp1)
SHIFT
GoTo :LOOP
:ELOOP
::echo %FPATH%
::Run Rscript script, changing to its path if asked
::=================================================
If %CHANGEDIR%=="T" (CD %FPATH%)
Echo "%RINSTALLPATH%\bin\Rscript.exe" %ARGS%
"%RINSTALLPATH%\bin\Rscript.exe" %ARGS%
endlocal
:: ==== Subroutines ====
GoTo :EOF
:USAGE
Echo USAGE:
Echo R [-cd] [RScriptOptions] Script [ScriptArgs]
Echo.
Echo -cd changes to script dir. Must be first par.
Echo To get RScript help on options etc.:
Echo R --help
GoTo :EOF
:CHECKSET
if not defined RINSTALLPATH for /f "tokens=2*" %%a in ('reg query %1 /v %2 2^>NUL') do set RINSTALLPATH=%%~b
GoTo :EOF
该脚本在运行之前打印实际的 RScript 调用行。
请注意,添加了一个参数 ,-cd
以自动更改为脚本目录。事实上,从 R 内部猜测脚本路径并不容易(并用 设置它setwd()
),以便调用其他脚本或读/写放置在同一路径(或相对路径)中的数据文件。
这个 ( -cd
) 可能会使您的其他命令参数变得多余,因为您可能会发现直接从脚本内部调用它们很方便。