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

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

以下是“vs.bat”文件的内容

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。


澄清:

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

光盘分析

调用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 也不能解决问题。

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

最佳答案

看起来您正在尝试调用另一个批处理/脚本文件,如果您停止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 文件,也不一定意味着它就是正在运行的文件。您的脚本会调用 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,并告诉您相关目录在路径中的位置。如果有脚本版本,它可能存在于 before exe 版本的路径中。您可以简单地检查您的 %PATH% 环境变量以确定哪个目录先出现。

其次,如果您在 c:\dea\bin 中有 exe,请尝试从您的脚本中显式运行它:

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

如果返回正常,它会增加对正在使用脚本版本这一事实的支持。

第三,您可以按照建议更改脚本(添加 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:

这将为您提供工作的时间,并希望让您清楚什么是工作。

关于Windows 批处理文件 - 批处理文件在需要一段时间才能完成的命令后停止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23420370/

相关文章:

c++ - 如何在 Windows 上创建通知气球?

c++ - 静态构建 Qt,找不到 MinGW

batch-file - 如何使用 FFmpeg 进行时间转换

php - 我在多个目录中有一个文件 (foo.php) 的多个副本,我想从一个 PHP 实例中执行这些副本

windows - Windows 中用于应用程序白名单的代码签名应用程序

ruby - 使用 Ruby 从 Windows 文件中提取选定的元数据

windows - findstr 在一行中显示匹配项

windows - 在 CMD 中检测可移动驱动器盘符

powershell - 批处理脚本在文件夹中查找空文件

c# - dotnet 测试 - 测试项目未编译时退出代码 0