Rscript文件路径包含空格

6

我正在尝试在Windows shell中运行以下R脚本:

Rscript C:/Documents/Folder name containing space/myscript.txt

在这种情况下,我会收到错误提示:
Fatal error: cannot open file 'C:/Documents/Folder': No such file or directory

然而,当我使用引号(尝试过单引号,双引号和三引号,因为其他帖子中建议这样做)时,出现以下错误:

Rscript "C:/Documents/Folder name containing space/myscript.txt"
The filename, directory name, or volume label syntax is incorrect.

我找不到避免空格问题的方法,更改文件位置使其没有空格对我来说不是一个选择。

任何帮助将不胜感激。

进一步说明:

我遇到的问题与 R 不直接相关,而是由于包含空格的文件路径被传递给 Rscript。

在文档中,Rsript 应该按以下方式使用:

Rscript [options] [-e expr [-e expr2 ...] | file] [args]

值得注意的是:

表达式和文件中允许有空格(但需要保护来自所使用的 shell 的空格,例如通过将参数括在引号中进行保护)。

然而,试图在引号中包含文件路径会导致错误。

The filename, directory name, or volume label syntax is incorrect.

为了避免混淆,当路径不包含空格时,运行Rscript C:/Documents/Folder_name/myscript.txt是可以正常工作的,就像Rscript "C:/Documents/Folder_name/myscript.txt"一样。

这样写是否正确呢?Rscript C:/Documents/Folder\\ name\\ containing\\ space/myscript.txt - lit
打开一个__命令提示符窗口__并运行cmd /?。最后一页上的最后一段帮助输出到__控制台窗口__(而不是shell窗口)中,解释了如果文件名参数包含空格或以下这些字符之一&()[]{}^=;!'+,`~,则必须用双引号括起来。在Windows上的目录分隔符是反斜杠字符\。不知道Windows上的Rscript是否期望像Unix/Linux/Mac上那样使用/作为文件名。Rscript.exe "C:\Documents\Folder name containing space\myscript.txt" 可能 可以工作。(我无法测试它,因为未安装Rscript。) - Mofi
你尝试过用引号将文件路径括起来吗?像这样:Rscript "C:/Documents/Folder name containing space/myscript.txt" - Steven
@Steven 是的,我已经尝试过了,但是我收到了“文件名、目录名或卷标语法不正确”的消息。 - Gabriel Olshansky
@GabrielOlshansky 最后一次尝试是 "'C:/Documents/Folder name containing space/myscript.txt'"。Windows 命令行解释器 cmd.exe 不支持使用 ' 引用带有空格的参数,就像 Linux shell 解释器 bashshksh 一样。因此,在 Windows 上必须使用双引号来表示带有空格的参数字符串。但也许 Rscript 的编码非常糟糕,只能正确解释用 ' 括起来的带有空格的文件名。而且由于 Rscript 是从 Unix 移植过来的,因此使用第一个参数 --,第二个参数为用 " 括起来的文件名可能会有所帮助。 - Mofi
显示剩余6条评论
4个回答

3

在Windows平台上,R 3.5.0版本存在一个错误。
除了降级之外,一种解决方法是创建一个路径中没有空格的R脚本,并使用source()运行带有空格的脚本:

## C:\Documents\Folder-name-no-space\myscript.txt
source("C:/Documents/Folder name containing space/myscript.txt")

然后你可以使用以下命令运行它:

Rscript C:\Documents\Folder-name-no-space\myscript.txt

或者也可以:
Rscript C:/Documents/Folder-name-no-space/myscript.txt

您也可以尝试使用8.3文件名。 您可以使用以下方式获取它:
for %I in ("C:/Documents/Folder name containing space/myscript.txt") do @echo %~sI

更新

自3.5.1版本以来,该问题已得到修复。


1
正斜杠在R中可以很好地工作,所以不用担心反斜杠。我已经验证过,在Windows 8.1的CMD.exe终端上以下命令可以正常运行:
C:\Windows\System32> Rscript "C:/Users/hb/folder with spaces/script.R"
[1] "1+2+3"

C:\Windows\System32>

我猜测你的路径名可能不正确。如果是不存在的路径名,你会得到以下错误信息:

C:\Windows\System32> Rscript --vanilla "C:/Users/hb/folder with spaces/non-existing.R"
Fatal error: cannot open file 'C:/Users/hb/folder with spaces/non-existing.R': No such file or directory

你可以在R内部进行验证,例如:

> file.exists("C:/Users/hb/folder with spaces/script.R")
[1] TRUE

1

简单解决方案: 安装更新版本的 R。

版本3.5.1发布说明中,相关的错误修复在此处描述:

允许 Rscript 的文件参数包含空格,即使它是命令行上的第一个。


0

另一个便捷的解决方法是为路径中包含空格的部分创建一个别名,即:

SUBST k: "c:\Folder with Spaces"
rscript k:\scripts\program.R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接