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