複数のクライアント用にSQL ServerとLDAPサーバーからデータを取得しようとしています。私は最初にSQLデータを取得し、次にLDAPデータを取得する必要があります。 Unixシェルでは、サブプロセスの周りにループを作成して、両方の検索を各クライアントで行い、それが完了するのを待つことができました。しかし、Windowsのバッチファイルとして、それは順次発生します。私。あるクライアントのデータを取得するまで、次のクライアントには移動しません。どのようにして各クライアントのデータを同時に取得できますか?ここでは、私が持っているものです。複数のプログラムをバックグラウンドに配置しないで起動する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がそれを必要としませんが^>のようにエスケープ最初のリダイレクトを行う必要があります。この時点では、すべてがバックグラウンドで取り出されると仮定しています。作成したゼロバイトの一時ファイルが存在するかどうかをチェックすることで、プロセスが完了した時点を確認する必要があります。しかし、ループを通る各反復は、バックグラウンドに配置されることによって直前に完了するのではなく、前のループが完了したときにのみ開始されます。誰も私はこれを修正する方法を提案することはできますか?あなたにも(^&^&
を)&&
をエスケープする必要が
おかげで、 ベン
ヒント:代わりに 'トークンを= 1,2,3,4,5,6'指定することも可能です'tokens = 1-6'。なぜなら、最初の6つのトークンが指定された理由はわかりません。なぜなら、ポストされたバッチコードは '%% G'と' %% K'でトークン1と2のみを使用するからです。 – Mofi
個々にリストする代わりに、tokens = 1-6を使うことができます。すべてのトークンが使用されていますが、「...」と置き換えられたほとんどの行オプションは削除されているので、私が尋ねてきたことに気づかず、私がやっていたことは見やすくなりました。 – Ben