【问题标题】:Find absolute path of Rscript batch查找 Rscript 批处理的绝对路径
【发布时间】:2020-07-28 07:05:18
【问题描述】:

我正在尝试编写一个小脚本来在运行 Windows 操作系统的机器中查找 Rscript 的绝对路径。我假设 Rscript 必须在 C:\Program Files\R\R-x.x.x 目录下找到,其中 x.x.x 代表 R 的任何版本。我编写了以下基于脚本在多个线程上 (Find file and return full path using a batch file)。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /d %%a in ("C:\Program Files\R\") do (
  if "%%~nxa"=="Rscript.exe" (
    set p=%%~dpnxa
    )
)

不幸的是,if 条件将 p 分配给 C:\Program Files\R\R-x.x.x 中的每个文件和文件夹。如果有人知道如何正确查找和分配 p,我将不胜感激!

问候,

胡安

编辑

我正在添加我的完整脚本

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /R %%a in ("C:\Program Files\R\R-*") do (
  if /i "%%~nxa"=="Rscript.exe" (
    set "p=%%~fa"
    )
)
if defined p (
echo %p%
) else (
echo File not found
)

%p% runShinyApp.R 1> ShinyApp.log 2>&1

【问题讨论】:

  • R-*放在\R\ 后面,用if "%%~nxa"=="Rscript.exe"替换if exist "%%~fa\Rscript.exe", then use set "p=%%~fa\Rscript.exe"`...
  • 我还是有同样的问题

标签: windows batch-file cmd


【解决方案1】:

不知道你为什么要做%%~dpnxa,而你可以只做%%~fa,这里有一些方法。

@echo off
for %%a in ("C:\Program Files\R\*") do (
  if /i "%%~nxa"=="Rscript.exe" (
    set "p=%%~fa"
    )
)

另一种方法是使用where,而不必执行if 语句,因为您在where 搜索中指定了可执行文件。您可以递归搜索整个驱动​​器中的路径,或者指定路径,例如我们在"C:\Program Files"中递归搜索。

@echo off
for /f "delims=" %%a in ('where /r "%programfiles%" "rscript.exe"2^>nul') do set "p=%%~fa"

EDIT 在你的 cmets 之后,这应该可以工作。

@echo off
for /f "delims=" %%a in ('where /r "%programfiles%\R\R-3.6.3\bin\x64" "rscript.exe"2^>nul') do "%%~fa" runShinyApp.R 1> ShinyApp.log

不过,我建议您在 do 行中指定 runShinyApp.R 的路径。

【讨论】:

  • 感谢您的 cmets。但是,我在我的 R-x.x.x 文件夹中找不到任何可用的 Rscript.exe 文件(我在 R-x.x.x\bin 下有 3 个不同的文件 i>、R-x.x.x\bin\x64R-x.x.x\bin\x386 目录。
  • 那么你必须找到它。打开cmd 并运行where /R c:\ "rscript.exe" 并显示结果。
  • 我得到了我所期待的c:\Program Files\R\R-3.6.3\bin\Rscript.exe c:\Program Files\R\R-3.6.3\bin\i386\Rscript.exe c:\Program Files\R\R-3.6.3\bin\x64\Rscript.exe
  • 好的,很好,那么您想使用其中的哪一个来执行? x64i386 还是直接在bin?然后我会修改我的答案
  • x64中的那个
猜你喜欢
  • 2012-04-30
  • 2014-01-15
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多