我正在尝试通过我编写的批处理文件运行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位计算机上运行。
答案 0 :(得分:1)
使用批处理文件,您可以通过使用&
转义^
来使其正常工作。我没有Windows机器,但你可以先手动检查一下是否有效,如果有的话,我可以在必要的时候和你合作实现一个字符串转义的功能。
替换下面两个中的一个工作(原谅我,因为我没有Windows机器),
set workable_filename=%file_name:^&=^^&%
set workable_filename=%file_name:&=^&%
@REM:: I cannot test, but one of these should work