【问题标题】:Use R to pass commands to bat file that opens cmd terminal使用 R 将命令传递给打开 cmd 终端的 bat 文件
【发布时间】:2019-10-29 15:47:18
【问题描述】:

我有一个我使用的仪器附带的 .bat 文件。该文件在 Windows 中打开一个 cmd.exe 终端,然后我必须在其中更改目录并运行命令来处理该目录中的文件。我想创建一个 R 脚本来自动化这个(并附加到我为前端编写的另一个代码块,以便自动化整个过程。)

我一直在尝试 shell、shell.exec、system 和 system2 的变体……但没有任何东西能按我预期的方式工作。

这可以运行bat文件并打开cmd.exe窗口:

shell.exec("C:\\Program Files\\Thermo Fisher Scientific\\Affymetrix Power Tools\\APT-1.20.5\\bin\\apt-vars.bat")

但我需要能够将目录更改为当前工作目录。 (bat 文件打开时 wd 设置为桌面。)

然后我需要在目录更改后在提示符中运行以下行:

apt-cel-convert.exe --format text --in-place --cel-files CEL_FILE.txt"

尝试:

outdir <- getwd()

#formats the wd path
out_dir <- gsub("/", "\\\\", outdir)

#define pieces
script <- "C:\\Program Files\\Thermo Fisher Scientific\\Affymetrix Power Tools\\APT-1.20.5\\bin\\apt-vars.bat"
command <- "apt-cel-convert.exe --format text --in-place --cel-files CEL_FILE.txt"

#put it all together
path <- paste(script, "&& cd",out_dir, "&&", command, sep = " ")

#run it
shell.exec(path)

结果:

Error in shell.exec(path) : 
  'C:\Program Files\Thermo Fisher Scientific\Affymetrix Power Tools\APT-1.20.5\bin\apt-vars.bat && cd C:\Users\me\Desktop\test && apt-cel-convert.exe --format text --in-place --cel-files CEL_FILE.txt' not found

我尝试了不同的片段组合组合,但我唯一能做的就是单独运行 .bat 文件。 (shell.exec(script) 有效。)

我在 R 中尝试做的事情可能吗?

编辑: 如果我手动编码,我能够得到我想要的结果。输出显示在 R studio 中,而不是打开窗口。 (system() 命令所需的拍摄路径):

system('"C:\\PROGRA~1\\THERMO~1\\AFFYME~1\\APT-12~1.5\\bin\\apt-vars.bat" && cd "C:\\Users\\me\\Desktop\\test" && apt-cel-convert.exe --f text --i --cel-files CEL_FILE.txt')

但是当我尝试使用变量和 paste0() 汇总所有内容时,我无法让它工作。该行返回没有错误,但它不会触发脚本。

#set apt location
apt_cnvrt <- "C:/Program Files/Thermo Fisher Scientific/Affymetrix Power Tools/APT-1.20.5/bin/apt-vars.bat"
#convert path format
apt_cnvrt <- gsub("/", "\\\\", apt_cnvrt)
#get short path
apt_cnvrt <- shortPathName(apt_cnvrt)
#store wd
outdir <- getwd()
#create file with list of files in dir
cel_list <- list.files(path = outdir, full.names = F, pattern = ".CEL")
fileConn<-file(paste0(outdir,"/CEL_FILE.txt"))
writeLines(c("cel_files", cel_list), fileConn)
close(fileConn)
#convert path format
outdir <- gsub("/", "\\\\", outdir)
#get short path
outdir <- shortPathName(outdir)
#set apt command
command <- "apt-cel-convert.exe --f text --i --cel-files CEL_FILE.txt"
#paste variables together to make: system('"C:\\Progra~1\\Thermo~1\\Affyme~1\\APT-1.20.5\\bin\\apt-vars.bat" && cd "C:\\Users\\me\\Desktop\\test" && apt-cel-convert.exe --format text --in-place --cel-files CEL_FILE.txt')
path <- noquote(paste0("'\"",apt_cnvrt,"\"", " && cd \"",outdir,"\" && ", command,"'"))
system(path)

当一切都说完后,路径看起来像这样,并且它与完全有效的命令相匹配....但它不会触发脚本:

'"C:\\PROGRA~1\\THERMO~1\\AFFYME~1\\APT-12~1.5\\bin\\apt-vars.bat" && cd "C:\\Users\\me\\Desktop\\test" && apt-cel-convert.exe --f text --i --cel-files CEL_FILE.txt'

*这不是重复的,这是最初的问题。随着我取得进展并有一个不同的问题,我提出了一个新问题并与之关联。

【问题讨论】:

标签: r shell batch-file cmd


【解决方案1】:

我试图在这里发布一个更简洁的问题和我的更新:

[R system or system2 command using paste or sprintf to run bat file?

我可以通过如下调用系统来实现它:

system(sprintf("\"%s\" && cd \"%s\" && %s", apt_cnvrt, outdir, command))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2015-04-08
    • 2018-05-18
    • 1970-01-01
    • 2013-04-14
    • 2020-11-19
    • 2012-03-12
    相关资源
    最近更新 更多