Windows批处理文件 - 批处理文件在需要一段时间才能完成的命令后中途停止执行

时间:2014-05-02 03:44:40

标签: windows batch-file cmd batch-processing windows-7-x64

以下是“vsbat”文件的内容

call "C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"

call path.bat

dea usev bis 

cd ana

call b-env-i.bat

执行此批处理文件时,执行以下步骤后停止。

dea usev bis

任何人都可以帮助指出这里出了什么问题,以及如何让所有命令执行。请注意,上述命令(dea usev bis)工作正常(在批处理中,如果单独执行)。 dea是可执行文件的名称,“usv bis”是“dea”exe的运行时参数。

我正在运行Windows 7。


澄清:

当我运行vsbat时,在第三次调用“dea usev bis”成功执行后,批处理文件停止执行。这是以下调用(它们是VS.bat的一部分)不执行

cd ana

致电b-env-i.bat

请注意,调用“dea usev bis”需要大约20秒才能执行,无论是单独运行还是作为脚本的一部分运行时。


更新

我尝试过paxdiablo的建议,结果如下:

[C:\dea]for %i in (dea.cmd) do @echo %~$PATH:i
ECHO is on.

[C:\dea]for %i in (dea.bat) do @echo %~$PATH:i
ECHO is on.

[C:\dea]for %i in (dea.exe) do @echo %~$PATH:i
C:\dea\bin\dea.exe

[C:\dea]where dea.exe
C:\dea\bin\dea.exe
C:\dea\bin\dea.exe.1
C:\dea\bin\dea.exe.ia64

当我通过以下方式明确地运行它时,我仍然遇到同样的问题

c:\dea\bin\dea.exe usev bis

而且,正如我之前所说,将脚本更改为call dea也无法解决问题。

还有什么可以尝试吗?

1 个答案:

答案 0 :(得分:9)

看起来您正在尝试调用另一个批处理/脚本文件,如果您离开call,它将只是链接而不是被调用(链接到,在这种情况下,意味着它不会返回)。我建议将该行改为:

call dea usev bis

举例来说,请考虑脚本go2.cmd

@echo off
echo %1

go.cmd

@echo off
call go2 1
go2 2
echo 3

执行go只会给您:

1
2

因为go2 2行链接到,而不是调用该脚本。但是,call go2 1行可以正常工作。

而且,即使您拥有 dea.exe文件,也不一定意味着它正在运行。{p>您的脚本调用dea,因此可以选择实际运行到shell的内容(搜索路径,尝试不同的扩展等)。

检查您实际调用的内容是否是批处理文件,您可以执行以下操作。首先,执行以下表彰:

echo %PATH%
for %i in (dea.cmd) do @echo %~$PATH:i
for %i in (dea.bat) do @echo %~$PATH:i
for %i in (dea.exe) do @echo %~$PATH:i

(或者,如果您正在运行Win 7+,我认为您可以使用where dea*,有关详细信息,请参阅here

这将显示路径中是否有dea.cmd/bat/exe,并在相关目录的路径中告诉您 where 。如果存在脚本版本,则它可能存在于 {/ 1}}版本之前的路径中。您可以简单地检查exe环境变量,找出最先出现的目录。

其次,如果%PATH%中有exe,请尝试使用以下内容从脚本中明确地运行

c:\dea\bin

如果返回正常,则会增加对正在使用脚本版本的支持。

第三,您可以按照建议更改脚本(添加c:\dea\bin\dea.exe usev bis )并查看是否可以修复它。如果 引用脚本,则会修复它。


如果 none 这些工作(基于您的回复call绝对是dea文件),您需要开始研究完全发生故障的地方。这可以通过在每一行之间放置exe语句来完成,这样您就可以看到导致问题的原因。换句话说,比如:

echo

这将为你提供工作的时间安排,并希望明白 的工作原理。