同时在Windows中运行批处理文件的多个实例?

时间:2014-04-22 15:10:09

标签: windows batch-file

我有一个Windows调度程序调用的Windows批处理文件。当我尝试同时运行批处理文件的多个Windows调度程序任务时,批处理文件被第一个进程锁定,所有其他实例都失败。

Windows中是否有办法同时运行多个批处理文件实例?

我的脚本很简单:

set java_classpath
java javaClass

4 个答案:

答案 0 :(得分:1)

批处理文件机制没有什么固有的限制可以同时运行相同脚本的进程数。运行时,实际的批处理脚本不会被锁定。实际上,可以在批处理脚本运行时对其进行修改,但这通常是一个非常糟糕的主意。

但批处理脚本可以采取任何阻止同时运行的操作。最明显的是脚本是否尝试将输出重定向到特定文件(常量路径和名称)。输出重定向建立了一个独占锁,阻止任何其他进程获得相同的锁。

另一种可能性是你的脚本可能正在调用外部命令或以某种方式建立独占锁的程序。

无论哪种方式,都不应该阻止多个进程同时启动相同的脚本。但是,如果脚本建立了一个独占锁,那么一个(或多个)实例可能会崩溃或过早退出,或者似乎挂起,这取决于失败的锁定请求的处理方式。

除非您发布实际的脚本,否则没有任何方法可以更具体。但如果它是一个长脚本,那么你应该尝试在发布之前找出问题所在。

答案 1 :(得分:0)

Windows 8任务计划程序具有以下选项(在最后,"设置"选项卡): 如果任务已在运行,则适用以下规则:

  • 不要启动新实例(默认)
  • 并行运行新实例
  • ...

您可能应该更改此设置。而且,我建议你调查http://serverfault.com并发布在那里。

答案 2 :(得分:0)

您是否尝试使用%systemroot%\cmd.exe /K C:\path\batchfile.bat调用批处理文件?每次打开一个新的cmd实例时使用/ K,猜猜它是shell而不是文件会让你觉得奇怪。

答案 3 :(得分:0)

对于那些从谷歌来这里寻找同时运行多个.bat文件实例的方法的人来说,这个脚本就是一个简单的方法:

set N=3
for /L %%i in (1,1,%N%) do (
  start yourscript.bat
)