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

use*_*917 3 windows cmd batch-file 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
Run Code Online (Sandbox Code Playgroud)

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

dea usev bis
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助指出这里出了什么问题以及我如何能够执行所有命令.请注意,上述命令(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
Run Code Online (Sandbox Code Playgroud)

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

c:\dea\bin\dea.exe usev bis
Run Code Online (Sandbox Code Playgroud)

而且,正如我之前所说,更改脚本call dea也不能解决问题.

还有什么我可以尝试的吗?

pax*_*blo 9

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

call dea usev bis
Run Code Online (Sandbox Code Playgroud)

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

@echo off
echo %1
Run Code Online (Sandbox Code Playgroud)

并且go.cmd:

@echo off
call go2 1
go2 2
echo 3
Run Code Online (Sandbox Code Playgroud)

执行go只会给你:

1
2
Run Code Online (Sandbox Code Playgroud)

因为go2 2行链接到,而不是调用那个脚本.call go2 1然而,该线路工作正常.

而且,即使你一个dea.exe文件,也不一定意味着它正在运行.您的脚本调用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
Run Code Online (Sandbox Code Playgroud)

(或者我认为你可以使用,where dea*如果你正在运行Win 7+,请参阅此处了解详情).

这会告诉你,如果有一个dea.cmd/bat/exe在你的路径,并告诉你那里的路径相关的目录是.如果存在脚本版本,则它可能存在于版本之前的路径中exe.您可以简单地检查%PATH%环境变量以确定首先出现的目录.

其次,如果你有exein c:\dea\bin,请尝试从脚本中明确地运行:

c:\dea\bin\dea.exe usev bis
Run Code Online (Sandbox Code Playgroud)

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

第三,您可以按照建议(添加call)更改脚本,看看是否可以修复它.如果它引用的脚本,这将解决这个问题.


如果没有这些工作(这似乎是根据你的回应的情况下dea,绝对是一个exe文件),你需要开始寻找到确切失败发生.这可以通过echo在每一行之间放置一个语句来完成,这样您就可以看到导致问题的原因.换句话说,像:

echo DEBUG a & time <nul:
call "C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
echo DEBUG b & time <nul:
call path.bat
echo DEBUG c & time <nul:
dea usev bis 
echo DEBUG d & time <nul:
cd ana
echo DEBUG e & time <nul:
call b-env-i.bat
echo DEBUG f & time <nul:
Run Code Online (Sandbox Code Playgroud)

这都将让你定时为的事情工作,希望使之明显发生了什么工作.