Используйте R для передачи команд в файл bat, который открывает терминал cmd - PullRequest
0 голосов
/ 29 октября 2019

У меня есть файл .bat, который поставляется с инструментом, который я использую. Файл открывает терминал cmd.exe в Windows, где мне нужно изменить каталог и запустить команду для обработки файлов в этом каталоге. Я хочу создать сценарий R, который автоматизирует это (и присоединяется к другому блоку кода, который я написал для лицевой стороны, чтобы автоматизировать весь процесс).

Я пробовал варианты оболочки,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 (скрипт) работает.)

Возможно ли то, что я пытаюсь сделать в 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'

* Это не дубликат, это начальный вопрос. Когда я достиг прогресса и у меня возник другой вопрос, я задал новый вопрос и связался с ним.

1 Ответ

0 голосов
/ 31 октября 2019

Я попытался опубликовать более краткий вопрос с моими обновлениями здесь:

[ R system или system2 команда, использующая paste или sprintf для запуска bat-файла?

ИЯ смог заставить это работать, вызвав систему следующим образом:

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