1

我正在尝试通过我编写的批处理文件运行 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 的问题,我不确定发生了什么。而不是使用直接位于 中的 Rscript.exe \bin,您必须更进一步并使用"!PATH!\R-3.0.1\bin\i386\Rscript.exe"哪个有效,这很可能是因为我在 32 位机器上而不是 64 位机器上运行。

4

1 回答 1

1

使用批处理文件,您通常可以通过&使用^. 我没有windows机器,但你能先手动检查一下这是否可行,如果可以,我可以在必要时与你合作实现一个字符串转义的函数。

对于以下两个工作中的替换之一(请原谅我没有Windows机器),

set workable_filename=%file_name:^&=^^&%
set workable_filename=%file_name:&=^&%
@REM:: I cannot test, but one of these should work
于 2013-08-29T18:43:57.150 回答