【发布时间】: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'
*这不是重复的,这是最初的问题。随着我取得进展并有一个不同的问题,我提出了一个新问题并与之关联。
【问题讨论】:
-
一个可能的选择是编辑 bat 文件来更改目录,或者创建一个新的 bat 文件来更改目录,然后让它调用您的 apt_vars.bat 文件。
标签: r shell batch-file cmd