夸托_render从.bat / .cmd文件中断开

jgwigjjp  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(110)

这有点复杂,但我想其他人可能也有这个问题。
Quarto非常棒,但是遇到了一个问题,一个函数(quarto_render)无法在通过. bat/. cmd文件访问的脚本中呈现文档。如果我从RStudio IDE运行R脚本,没有问题,但是通过. bat访问,是的。已经能够重现这个问题,我将尝试概述这个问题,希望有人能提供解决方法。
不幸的是,由于需要三个文件(我正在处理的实际项目使用了五个独立的文件),重新创建它需要一些时间。我正在使用的源项目文件夹名为Test,直到文件3才真正起作用。

    • 文件1-测试文档. qmd**

创建一个新的. qmd文档(我称之为我的test_document.qmd)。设置为html输出,并保留默认的YAML和其他文本。无需修改。

    • 文件2-测试脚本. R**

创建一个新脚本(test_script.R)。按以下方式...

library(quarto)
library(here)

quarto_render(here("test_document.qmd"))

运行时,这应将Test_document. qmd呈现为文件位置中的单独html文件。

    • 文件3-test.cmd**-(这是开始出现问题的位置)

当扩展名更改为. bat时,命令提示符中应呈现文本文件(. txt)。. cmd文件中使用的代码附在下面,但由于它是基于工作的,因此必须对部分进行编辑。
文件夹起始位置为"C:\Temp\Test"

{.cmd file}
cd /d %~dp0 
if exist .\test_document.qmd "C:\Program Files\R\R-4.2.1\bin\x64\Rscript.exe" "C:\Temp\Test\test_script.R"
PAUSE

为方便起见,将文件保存到与其他两个文件相同的文件夹中。现在,当运行test. cmd文件(通过双击运行)时,命令提示符界面中会出现以下情况...

    • 产出**
{command prompt}

C:\Temp\Test>cd /d C:\Temp\Test\

C:\Temp\Test>if exist .\test_document.qmd "C:\Program Files\R\R-4.2.1\bin\x64\Rscript.exe" "C:\Temp\Test\test_script.R"
here() starts at C:/Temp/Test
Error in find_quarto() : Unable to find quarto command line tools.
Calls: quarto_render -> find_quarto
Execution halted

C:\Temp\Test>PAUSE

find_quarto没有在quarto包中定义,尽管它确实出现在这里...
https://rdrr.io/github/quarto-dev/quarto-r/src/R/quarto.R
这是我所能得到的。我想使用. bat文件,因为计划是将该文件与任务计划程序联系起来,以便安排我正在进行的实际项目每周运行一次左右。
session_info(如果有帮助)...

> devtools::session_info()
─ Session info ──────────────────────────────────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.2.1 (2022-06-23 ucrt)
 os       Windows 10 x64 (build 19042)
 system   x86_64, mingw32
 ui       RStudio
 language (EN)
 collate  English_United States.utf8
 ctype    English_United States.utf8
 tz       America/New_York
 date     2022-08-29
 rstudio  2022.07.0+548 Spotted Wakerobin (desktop)
 pandoc   2.18 @ C:/Program Files/RStudio/bin/quarto/bin/tools/ (via rmarkdown)
    • 在批处理外部运行脚本**

打开RStudio IDE〉
打开测试脚本. R文件〉
光标在脚本中时,选择cntrl + alt + R运行

eanckbw9

eanckbw91#

经过一些实验,我能够想出一个两步的过程来解决从. cmd文件运行Rscript时的quarto_render问题。

    • 步骤1**

注解掉quarto_render(),因为此函数将被移动到. cmd文件中。
要从命令行渲染一个四开文档,我发现我需要直接访问quarto.cmd。
在我的. cmd文件测试中看起来是这样的...

cd /d %~dp0 
"D:\Program Files\R\R-4.2.1\bin\Rscript.exe" "C:\Temp\Test\test_script.R"

C:
cd "D:\Program Files\RStudio\bin\quarto\bin" 
quarto.cmd render "C:\Temp\Test\test_document.qmd"

我发现这适用于我的工作流程,从命令行渲染四开文档,并认为它可能对其他人有用。
两个来源对拼凑这个解决方案非常有帮助...
Command prompt won't change directory to another drive
https://community.rstudio.com/t/bash-quarto-command-not-found/144187

    • 第二步**

最后,渲染完quarto文件后,运行Rscript的其余部分。

cd /d %~dp0 
"D:\Program Files\R\R-4.2.1\bin\Rscript.exe" "C:\Temp\Test\test_script.R"

我已经在"任务调度器"应用程序中调度了这些操作,首先调度四分渲染操作,然后调度其余脚本。
希望这对其他人有帮助!

w41d8nur

w41d8nur2#

要保存两个文件,可以执行以下操作:

library(quarto)
library(here)

# quarto_render(here("test_document.qmd"))
system(paste0('quarto.cmd render ', here("test_document.qmd")))

如果您的路径中没有夸托,则可能需要

system(paste0('"D:/Program Files/RStudio/bin/quarto/bin/quarto.cmd" render ', here::here("test_document.qmd")))

相关问题