Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 嵌套的批处理结构执行被终止_Windows_Batch File_Cmd_Batch Processing - Fatal编程技术网

Windows 嵌套的批处理结构执行被终止

Windows 嵌套的批处理结构执行被终止,windows,batch-file,cmd,batch-processing,Windows,Batch File,Cmd,Batch Processing,我有一个嵌套的批处理结构。首先我从X.cmd开始,它调用X1.cmd,然后调用X2.cmd。但要求X2.cmd必须在X1.cmd完成其工作后立即启动 当前,在执行X1.cmd之后,它不会继续执行X2.cmd。我想这是因为“开始”的说法。(似乎它破坏了父窗口。)以解决此问题。我改变了结构,使X2.cmd在X1.cmd内部调用。然而,这一次的问题是:X2.cmd在tst10.exe完成它的工作之前启动,对我来说是无用的。(这是非常合乎逻辑的。因为X1.cmd通过调用tst10.exe来完成前4行的执

我有一个嵌套的批处理结构。首先我从X.cmd开始,它调用X1.cmd,然后调用X2.cmd。但要求X2.cmd必须在X1.cmd完成其工作后立即启动

当前,在执行X1.cmd之后,它不会继续执行X2.cmd。我想这是因为“开始”的说法。(似乎它破坏了父窗口。)以解决此问题。我改变了结构,使X2.cmd在X1.cmd内部调用。然而,这一次的问题是:X2.cmd在tst10.exe完成它的工作之前启动,对我来说是无用的。(这是非常合乎逻辑的。因为X1.cmd通过调用tst10.exe来完成前4行的执行,并通过调用X2.cmd来继续执行。但这对我来说是无用的,因为我需要tst10.exe来完成它的工作)

我需要能够检测到tst10.exe完成了它的工作,它的窗口被终止,然后我必须调用X2.cmd。我该怎么做

以下是我想要使用的结构:(X2.cmd必须在tst10.exe完成其工作后执行其工作)

X.cmd

call x1.cmd
call x2.cmd
start tst10.exe /r:a.txt /o:a.txt
start tst10.exe /r:b.txt /o:b.txt
start tst10.exe /r:c.txt /o:c.txt
start tst10.exe /r:d.txt /o:d.txt

:testloop
    tasklist | find "tst10.exe" >nul || exit /b 0
    ping -n 2 localhost > nul
    goto testloop
call K.cmd
call L.cmd
call M.cmd
call N.cmd
X1.cmd

call x1.cmd
call x2.cmd
start tst10.exe /r:a.txt /o:a.txt
start tst10.exe /r:b.txt /o:b.txt
start tst10.exe /r:c.txt /o:c.txt
start tst10.exe /r:d.txt /o:d.txt

:testloop
    tasklist | find "tst10.exe" >nul || exit /b 0
    ping -n 2 localhost > nul
    goto testloop
call K.cmd
call L.cmd
call M.cmd
call N.cmd
X2.cmd

call x1.cmd
call x2.cmd
start tst10.exe /r:a.txt /o:a.txt
start tst10.exe /r:b.txt /o:b.txt
start tst10.exe /r:c.txt /o:c.txt
start tst10.exe /r:d.txt /o:d.txt

:testloop
    tasklist | find "tst10.exe" >nul || exit /b 0
    ping -n 2 localhost > nul
    goto testloop
call K.cmd
call L.cmd
call M.cmd
call N.cmd
x.cmd

call x1.cmd
call x2.cmd
start tst10.exe /r:a.txt /o:a.txt
start tst10.exe /r:b.txt /o:b.txt
start tst10.exe /r:c.txt /o:c.txt
start tst10.exe /r:d.txt /o:d.txt

:testloop
    tasklist | find "tst10.exe" >nul || exit /b 0
    ping -n 2 localhost > nul
    goto testloop
call K.cmd
call L.cmd
call M.cmd
call N.cmd
x1.cmd

call x1.cmd
call x2.cmd
start tst10.exe /r:a.txt /o:a.txt
start tst10.exe /r:b.txt /o:b.txt
start tst10.exe /r:c.txt /o:c.txt
start tst10.exe /r:d.txt /o:d.txt

:testloop
    tasklist | find "tst10.exe" >nul || exit /b 0
    ping -n 2 localhost > nul
    goto testloop
call K.cmd
call L.cmd
call M.cmd
call N.cmd
x2.cmd

call x1.cmd
call x2.cmd
start tst10.exe /r:a.txt /o:a.txt
start tst10.exe /r:b.txt /o:b.txt
start tst10.exe /r:c.txt /o:c.txt
start tst10.exe /r:d.txt /o:d.txt

:testloop
    tasklist | find "tst10.exe" >nul || exit /b 0
    ping -n 2 localhost > nul
    goto testloop
call K.cmd
call L.cmd
call M.cmd
call N.cmd

如果没有
调用
,执行将转移到被调用的批处理文件,而不会返回到调用方。

仅使用x.cmd中的start with wait参数来启动X1.cmd。 就像这样: X.cmd
start/wait X1.cmd

@Xentius,很抱歉,同时做了3件事,并发布了一个不完整的答案。@Xentius,x2将在X1完成时执行,执行返回调用方(x.cmd)继续。@Xentius,我将更改答案,但您没有指示tst10进程应是并发的。@Xentius,已更新<代码>ping用于包括延迟。如果在操作系统中可用,您也可以使用
timeout/t1
。非常感谢您的回答。最后一件事也许你应该编辑:我需要使用start而不是调用X2.cmd(start K.cmd start L.cmd等)。我的操作系统支持timeout/t1,但你认为哪一个更有效?超时还是ping?