我正在实现类似于Gradle包装器的批处理文件。其想法是它将下载主应用程序并运行它,而用户不必下载并安装应用程序本身。
一切正常,现在我正在实现更新应用程序。这涉及用新版本的批处理文件替换批处理文件(除了对批处理文件本身所做的任何更改之外,该新版本还具有新的下载URL)。
但是,当我的应用程序替换批处理文件时,这将导致奇怪的结果(如https://stackoverflow.com/a/31257641/1668119和该问题的其他答案中所述)。有没有一种安全的方法可以在运行时替换批处理文件,而不会导致新行或删除行引起问题?
答案 0 :(得分:0)
基于Mofi的评论和the answer they linked to,我使用的是这样的内容:
setlocal EnableDelayedExpansion
my-application && exit 0 || exit !ERRORLEVEL!
批处理文件执行器似乎一次只能读取该文件,因此总是在该行上退出意味着它永远不会尝试从该批处理文件中读取更多内容,因此该批处理文件是否已执行都无关紧要。修改。
setlocal EnabledDelayedExpansion
很重要,因为否则将在应用程序运行之前对ERRORLEVEL
进行评估,因此即使应用程序失败,脚本也会始终返回0。