运行mercurial命令时,windows批处理文件将退出
对于我在Windows XP上的mercurial存储库的日常备份,我使用了一个简单的批处理文件运行mercurial命令时,windows批处理文件将退出,windows,git,mercurial,batch-file,cmd,Windows,Git,Mercurial,Batch File,Cmd,对于我在Windows XP上的mercurial存储库的日常备份,我使用了一个简单的批处理文件hg_backup.bat,它只做了一些目录更改和mercurial调用,最后使用了pause命令,如下所示: @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(与Ortois
hg_backup.bat
,它只做了一些目录更改和mercurial调用,最后使用了pause
命令,如下所示:
@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(与OrtoiseHG一起安装)的情况下运行良好。但是,从mercurial 1.8开始,它启动了第一个mercurial命令,然后突然退出,没有到达以下命令,甚至没有到达脚本的末尾。命令窗口消失了
我以前也遇到过同样的问题,当时我用git做了同样的尝试,但没有进一步研究,因为我只对一个存储库使用git。在我看来,有一些hg命令行调用的返回代码会导致脚本结束,而不是执行另一个命令,但我还不能验证这一点
有人知道为什么会发生这种情况,或者甚至知道如何修复它吗?如果您的
hg
是hg.bat
或hg.cmd
,请使用调用hg
并查看它是否开始工作
command.com
shell执行批处理文件以替换旧脚本(以节省内存),并且需要使用call
启动批处理脚本并稍后继续执行。此行为保留在Windowscmd.exe中以保持兼容性。我也有同样的问题,但@grawity提供的解决方案对我不起作用(我也不知道为什么)
我的解决方案是用cmd/C
替换call
,如下所示:
cmd /C hg sum
cmd /C hg stat
启动命令终端并在其中运行批处理文件,您应该会收到一些错误消息。不,这样做时根本没有错误消息。您是对的,调用的hg实际上是hg.cmd
,在批处理文件中每次调用hg之前使用call
可以解决问题。谢谢。:-)我想知道为什么决定将.cmd文件作为已安装工具的一部分公开,它不是在旧版本中完成的,因此升级破坏了我的整个生成服务器。@Lasse:在某些情况下,为了避免将真实目录放入%PATH%
(因为它也影响DLL搜索,并且许多跨平台软件使用大量库;一些示例是GTK+使用程序)。在其他情况下,准备运行时环境;可能是试图自动找到正确的python.exe
?可能是因为他只引用了bat/cmd文件。IIRC调用对其他任何东西都不起作用。cmd-C起作用。