我有一个使用的乐器随附的.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'
*这不是重复的,这是最初的问题。当我取得进步并提出不同的问题时,我提出了一个新问题并与之关联。
答案 0 :(得分:0)
我尝试在此处发布更新内容更简洁的问题:
[R system or system2 command using paste or sprintf to run bat file?
通过调用系统,我可以使它正常工作
system(sprintf("\"%s\" && cd \"%s\" && %s", apt_cnvrt, outdir, command))