【问题标题】:windows batch file exits when running mercurial commands运行 mercurial 命令时 Windows 批处理文件退出
【发布时间】:2011-03-07 08:51:48
【问题描述】:

对于我在 Windows XP 上的 mercurial 存储库的每日备份,我使用了一个简单的批处理文件 hg_backup.bat,它只是在最后使用 pause 命令进行了一些目录更改和 mercurial 调用,如下所示:

@Z:
@cd \hg_backup\drawings
hg pull -v
@cd \hg_backup\src\scripts
hg pull -v
@cd \hg_backup\eagle4\lbr
hg pull -v
@pause

这在 mercurial 最高 1.7(安装 TortoiseHg)上运行良好。但是,从 mercurial 1.8 开始,它会启动第一个 mercurial 命令,然后突然退出,而没有到达以下命令甚至脚本末尾。命令窗口就消失了。

之前我也遇到过同样的问题,当时我用 git 尝试了同样的事情,但没有进一步调查,因为我只将 git 用于一个存储库。在我看来,涉及 hg 命令行调用的一些返回码会导致脚本结束而不是执行其他命令,但我还无法验证这一点。

有谁知道为什么会发生这种情况,或者甚至可能如何解决它?

【问题讨论】:

  • 启动一个命令终端并在其中运行批处理文件,你应该有一些错误消息。
  • 不,这样做时根本没有错误消息。

标签: windows git mercurial batch-file cmd


【解决方案1】:

如果您的hghg.bathg.cmd,请使用call hg 看看它是否开始工作。

command.com shell 执行批处理文件替换旧脚本(以节省内存),并且需要使用call 来启动批处理脚本并稍后继续执行。出于兼容性考虑,此行为仍保留在 Windows cmd.exe 中。

【讨论】:

  • 你说得对,调用的 hg 实际上是 hg.cmd 并且在我的批处理文件中每次调用 hg 之前使用 call 可以解决问题。谢谢。 :-)
  • 我想知道将 .cmd 文件作为已安装工具的一部分公开的决定背后的原因是什么,它不是在旧版本中完成的,因此升级破坏了我的整个构建服务器。跨度>
  • @Lasse:在某些情况下,避免将真实目录放在%PATH%中(因为它也会影响DLL搜索,而且很多跨平台软件使用了大量的库;几个例子是GTK+使用程序)。在其他情况下,准备运行时环境;可能是尝试自动找到正确的python.exe
【解决方案2】:

我遇到了完全相同的问题,但@grawity 提供的解决方案对我不起作用(我不知道为什么)。

在我的情况下,解决方案是将call 替换为cmd /C,如下所示:

cmd /C hg sum
cmd /C hg stat

【讨论】:

  • 可能是因为他仅指的是 bat/cmd 文件。 IIRC 调用不适用于其他任何事情。 Cmd-C 可以。
猜你喜欢
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多