【问题标题】:Run Grails command from batch file until it succeed从批处理文件运行 Grails 命令直到成功
【发布时间】:2019-06-05 19:00:25
【问题描述】:

说明:

  • Grails 项目有几个插件依赖项(其中许多由于连接问题无法立即解决,其他一些正在很快得到正确解决)
  • 我从项目根目录上的 命令行 运行 grails,以便在我的项目中成功安装 grails 插件,但由于其中一些插件失败,我必须运行再次使用相同的命令(有时还会再次使用)

问题:

我怎样才能为 Windows (10) 制作一个 批处理文件,以便一遍又一遍地执行 grails 命令直到其结果成功了

>>> 我试过这个:How to run command until it succeeds?,但我没有运气。它仅在第一次执行命令,然后即使解决依赖关系时出现一些错误也会停止,如下图所示。 p>

我们将不胜感激。

【问题讨论】:

  • stackoverflow.com/questions/14534244/… 是一个很好的起点 start /b "" myCommand >output.txt >2&1 可能应该涵盖您在第一个循环脚本中想要的内容 --- 如果它确实有效的话将生成一个war文件,您可以检查是否在循环的每次迭代中都有它,如果您确实结束它并成功
  • 你尝试了什么代码。问题应显示您尝试使用的代码。

标签: windows batch-file grails


【解决方案1】:

评论太长了。修改How to run command until it succeeds? 可能会完成这项工作:

:repeat
(grails command here |find /I "Error Resolve error obtaining dependencies") &&goto :repeat
echo Success!

阅读Redirection

  • commandA && commandB 运行commandA,如果成功则运行commandB
  • commandA || commandB 运行 commandA,如果失败则运行 commandB

FIND will return an ErrorLevel as follows:

  • 0 至少在其中一个文件中找到字符串。
  • 1 找不到字符串
  • 2 如果列表中的任何文件不存在或没有文件匹配通配符掩码。给出的开关无效。

【讨论】:

  • 非常感谢,@JosefZ!,但是对于这个变体,grails 命令会被执行,即使出现错误,控制台也会打印“echo Success!Success!”并停在那里。检查我的答案,我找到了解决方案。
【解决方案2】:

找到解决方法:

逻辑:

  • 确保您的 grails 项目结构中用于此目的的目标文件夹没有发生战争。
  • 执行“grails war”命令,但不只是对批处理执行grails war,而是调用 grails war。事实证明,这是这里的一个关键方面。因为当命令前面没有 call 关键字时,grails 执行然后停止批处理,这意味着以下行永远不会执行(至少在 grails 命令失败时)
  • 检查war文件是否存在
  • 如果失败,则重试
  • 如果成功,那就大功告成!

代码:

@echo off

:loop
    echo Executing command...

    call grails war

    if exist "<full_path_to_war_file>" (
        echo Success!
    ) else (
        echo Failed!
        echo Retrying!
        goto loop
    )

echo Done!

重要提示:此变体使用 grails 的功能来创建战争。 Grails 在创建 war 之前会尝试解决那些未决的依赖关系,因此如果失败,则永远不会进行 war,这样就可以检测到依赖关系解析失败。

我想说我之前从来没有做过 .bat (所以,这可能会改进很多),非常感谢那些在这里发帖的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多