在Rscript.exe的文件路径中的&符号

时间:2013-08-29 18:38:50

标签: windows r batch-file cmd

我正在尝试通过我编写的批处理文件运行R脚本。我希望批处理脚本是灵活的,以便我可以将其移动到其他计算机或让它从网络驱动器运行,它将在所有情况下工作。我所做的是收集打开批处理文件的文件的路径,然后使用该路径激活R脚本。

当我的文件路径没有特殊字符时,它工作正常,但我遇到了特殊字符的问题。

以下是代码:

@ECHO OFF
setlocal EnableDelayedExpansion
set "_SCRIPT_DRIVE=%~d0"
set "_SCRIPT_PATH=%~p0"
set "PATH=!_SCRIPT_DRIVE!!_SCRIPT_PATH!"

这似乎符合要求,就像我做的那样

ECHO !PATH!

我得到了我想要的输出

C:\\A&B\File

但是,当我稍后通过Rscript.exe命令继续运行时,它无法识别延迟扩展并将&符号作为特殊字符执行。输入:

"!PATH!\R-3.0.1\bin\Rscript.exe" "!PATH!Scripts\Test.R"

返回:

'C:\\A' is not recognized as an internal or external command, operable program or batch file.

但是,当我尝试运行Rscript.exe时,我只有这个问题。我完全有能力打开像

这样的文件
"!PATH!Scripts\Test.R"

它执行没有任何问题。有没有其他人遇到过这个问题?有没有人看到我的语法有任何问题?

编辑:已解决

对于将来偶然发现这篇文章的人,我设法找到了解决这个问题的方法。事实证明它根本不是批处理脚本错误,而是Rscript.exe的问题,我不知道发生了什么。您不必使用直接位于\bin中的Rscript.exe,而是必须更进一步使用"!PATH!\R-3.0.1\bin\i386\Rscript.exe",这很有效,因为我在32位计算机而不是64位计算机上运行。

1 个答案:

答案 0 :(得分:1)

使用批处理文件,您可以通过使用&转义^来使其正常工作。我没有Windows机器,但你可以先手动检查一下是否有效,如果有的话,我可以在必要的时候和你合作实现一个字符串转义的功能。

替换下面两个中的一个工作(原谅我,因为我没有Windows机器),

set workable_filename=%file_name:^&=^^&%
set workable_filename=%file_name:&=^&%
@REM:: I cannot test, but one of these should work