运行 Rscript.exe 在带有可选参数的批处理文件上
Run Rscript.exe on batch file with optional arguments
我运行一个Windows批处理文件(.bat)
path_to_Rscript.exe file.R parameter1 parameter2 parameter3
在名为 file.R
的文件上
在file.R
中,我使用
读取参数
commandArgs(trailingOnly = TRUE)
ABC <- args[1]
DEF <- args[2]
GHI <- args[3]
如果没有parameter2
,只调用
path_to_Rscript.exe file.R parameter1 parameter3
如何确保 parameter3
未分配给 DEF
?
到目前为止,我使用 %%
作为占位符,但我不确定这是否是一种常见的方法。
是否有空参数的通用占位符?
没有通用的"no arg"占位符,这取决于程序。
答案是,如果没有一些假设,您无法确保 p3 未分配给 DEF,即,如果您只有两个参数,那么它们将始终是 ABC 和 GHI。在这种情况下,您检查 commandArgs 的长度并相应地进行调整 - 这是一个非常狭窄的解决方案。
如果你想使用可选的位置参数(这通常是个坏主意),它们必须放在最后,然后你真的只能得到一个,原因与你现在面临的相同。
解决这个难题的最好方法是使用 docopt。如果您不能使用 docopt,那么您将无法实现命令行解析器,这是一个通常已解决的问题。
我运行一个Windows批处理文件(.bat)
path_to_Rscript.exe file.R parameter1 parameter2 parameter3
在名为 file.R
在file.R
中,我使用
commandArgs(trailingOnly = TRUE)
ABC <- args[1]
DEF <- args[2]
GHI <- args[3]
如果没有parameter2
,只调用
path_to_Rscript.exe file.R parameter1 parameter3
如何确保 parameter3
未分配给 DEF
?
到目前为止,我使用 %%
作为占位符,但我不确定这是否是一种常见的方法。
是否有空参数的通用占位符?
没有通用的"no arg"占位符,这取决于程序。
答案是,如果没有一些假设,您无法确保 p3 未分配给 DEF,即,如果您只有两个参数,那么它们将始终是 ABC 和 GHI。在这种情况下,您检查 commandArgs 的长度并相应地进行调整 - 这是一个非常狭窄的解决方案。
如果你想使用可选的位置参数(这通常是个坏主意),它们必须放在最后,然后你真的只能得到一个,原因与你现在面临的相同。
解决这个难题的最好方法是使用 docopt。如果您不能使用 docopt,那么您将无法实现命令行解析器,这是一个通常已解决的问题。