2016-07-24 4 views
0

Ich versuche, Daten von einem SQL-Server und LDAP-Server für mehrere Clients zu erhalten. Ich muss zuerst die SQL-Daten und dann die LDAP-Daten abrufen. In der Unix-Shell war es einfach, eine Schleife um einen Unterprozess zu machen, wobei beide Abfragen für jeden Client ausgeführt wurden und dann darauf gewartet wurde, dass sie abgeschlossen war. Als Windows Batch-Datei passiert es jedoch sequentiell. I.e. bis ich die Daten für einen Client abrufe, geht es nicht zum nächsten. Wie kann ich die Daten jedes Kunden gleichzeitig erhalten? Hier ist, was ich habe:Windows-Batch-Datei mit Start nicht mehrere Progamme im Hintergrund

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 
) 

Aus irgendeinem Grund, ich brauche die erste Umleitung zu tun entkam als ^>, während die spätere nicht, dass müssen. An dieser Stelle gehe ich davon aus, dass alles im Hintergrund abgerufen wird und dass ich danach überprüfen muss, wann die Prozesse abgeschlossen sind, was ich tun würde, indem ich die Existenz der von mir erstellten temporären Null-Byte-Dateien überprüfe. Was jedoch passiert, ist, dass jede Iteration durch die Schleife nur dann beginnt, wenn der vorherige abgeschlossen ist, anstatt sofort aufzutauchen, indem sie im Hintergrund platziert wird. Kann jemand vorschlagen, wie ich das beheben kann?

Danke, Ben

+0

Hinweis: Anstelle von 'Token = 1,2,3,4,5,6' es ist auch möglich, zu spezifizieren 'Tokens = 1-6'. Nun, ich verstehe nicht, warum die ersten 6 Tokens angegeben werden, da der gebuchte Batch-Code nur Token 1 und 2 mit '%% G' und' %% K' verwendet. – Mofi

+0

Es ist gut zu wissen, dass Tokens = 1-6 verwendet werden können, anstatt sie einzeln aufzulisten. Alle Tokens werden verwendet, aber ich habe die meisten Zeilenoptionen entfernt und durch "..." ersetzt, damit sie nicht in die Richtung dessen, was ich gefragt habe, stören würden und was ich tun würde, wäre leichter zu sehen. – Ben

Antwort

0

Sie benötigen die && auch (^&^&) zu entkommen, sonst ist es alles aus, nachdem es sobald Start abgefeuert wird. Beispiel:

1 wird in einer neuen Shell korrekt ausgeführt, während 2 das Hauptfenster übernimmt (nicht was Sie wollen).

start cmd /C ping 127.0.0.1 && ping 127.0.0.2 

Beide werden nacheinander in einem neuen Fenster ausgeführt.

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

Wie oben, eine andere Möglichkeit, es zu tun.

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

auch die anderen > ist zu entkommen, dies funktionieren könnte:

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 
Verwandte Themen