Windows批处理文件使用开始不在后台放置多个程序

时间:2016-07-24 16:47:47

标签: windows batch-file background-process

我正在尝试从多个客户端的sql server和ldap服务器获取数据。我需要先获取sql数据然后获取ldap数据。在Unix shell中,直接围绕子进程进行循环,每个客户端都进行两次检索,然后等待它完成。作为Windows批处理文件然而它顺序发生。即直到我检索到一个客户端的数据,它才会转到下一个客户端。如何同时获取每个客户的数据?这就是我所拥有的:

REM Get DB and client info. from config file
for /F "tokens=1,2,3,4,5,6 delims=| eol=#" %%G in (%cfg%\%env%.data) do (
    REM Mark file as being in process of receiving data
    type nul > %%K.tmp

    REM Get data and remove tmp file to indicate completion
    start cmd /C sqlcmd .... -Q "A long query" ^> %%K.dat1 && "c:\Program Files\Softerra\LDAP Administrator 4\laimex.exe" ... /sql "Another query" > %%K.dat2 && del %%K.tmp
)

出于某种原因,我需要将第一个重定向转义为^>而后者并不需要那样做。此时我假设所有内容都将在后台检索,然后我需要检查进程何时完成,我将通过检查我创建的零字节临时文件的存在来检查。但是,通过循环的每次迭代仅在前一个迭代完成时开始,而不是通过放置在后台直接发生。任何人都可以建议我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你也需要转义&&^&^&),否则它会在启动后立即执行。{例如:

1正确地在新shell中执行,而2接管主窗口(不是你想要的)。

start cmd /C ping 127.0.0.1 && ping 127.0.0.2

两者都在新窗口中一个接一个地执行。

start cmd /C ping 127.0.0.1 ^&^& ping 127.0.0.2

与上述相同,另一种方法。

start cmd /C "ping 127.0.0.1 && ping 127.0.0.2"

也逃避其他>,这可能会有效:

start cmd /C sqlcmd .... -Q "A long query" ^> %%K.dat1 ^&^& "c:\Program Files\Softerra\LDAP Administrator 4\laimex.exe" ... /sql "Another query" ^> %%K.dat2 ^&^& del %%K.tmp
相关问题