2016-05-23 12 views
0

Ich versuche mehrere Batch-Befehle in einer bestimmten Reihenfolge auszuführen. Nach dem Start der ersten 4 Befehle sollte das Ende jedes Befehls den Start eines anderen auslösen.Batch-Befehl, spezifische Ausführungsreihenfolge und mehrere Befehle

Beispiel: Sobald der Befehl "ExportU1" beendet ist, sollte der Befehl "DeleteU1" starten und danach "ImportU1".

Wie soll ich das machen und/oder gibt es einen effizienteren Weg, jeden Befehl aufzurufen?

Mein aktueller Code:

C:\ 
cd C:\Program Files (x86)\salesforce.com\Data Loader\bin 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportDebitor 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ExportU1 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ExportU2 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ExportU3 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportKF 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportAPSO 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportAPGF 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" DeleteU1 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" DeleteU2 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" DeleteU3 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportU1 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportU2 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportU3 
stop 
+0

'start/wait' ... – Stephan

Antwort

0

So warten Sie auf einen Prozess zu beenden, start /wait verwenden.

Wie Sie für eine effizientere Art und Weise fragen:

set "commands=ImportDebitor ExportU1 ExportU2 ExportU3 ImportKF ImportAPSO ImportAPGF DeleteU1 DeleteU2 DeleteU3 ImportU1 ImportU2 ImportU3" 
for %%a in (%commands%) do start /wait process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" %%a 

Edit:

set "command=process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle"" 
for %%a in (Delete1, ImportDebitor) do start "Parallel-1" %command% %%a 
:wait1 
timeout 1 >nul 
tasklist /fi "Windowtitle eq Parallel-1" |find "exe" && goto :wait1 
start /wait "ImportU1" %command% ImportU1 
... 

Dies wird die ersten beiden Prozesse parallel starten, für beide von ihnen wartet vor dem Start des dritten bis zum Ende (und wartet auf den Abschluss)

+0

Hey, danke für die schnelle Antwort. Aber ich denke, ich habe es nicht sehr gut erklärt. Mein Ziel war es zu wissen, wann ein Befehl beendet wurde, weil ich den "ImportU1" -Befehl nur starten wollte, wenn "DeleteU1" UND "ImportDebitor" beendet waren. Gibt es eine Möglichkeit, die Befehle durch eine Schleife oder ähnliches hören zu lassen? –

+0

geben Sie den Prozessen einen Namen ('Start" WaitForMeToFinish "process.bat" c: ... "DeleteU1") und Schleife 'tasklist/fi" Windowtitle eq WaitForMeToFinish "', bis es keine Instanzen findet. – Stephan

+0

Bearbeitet, um Ihnen zu zeigen, wie Tun Sie das. Passen Sie sich Ihren Bedürfnissen an. – Stephan

0

Ich sehe keine Notwendigkeit für START. Dies ist nur erforderlich, wenn Sie Prozesse parallel ausführen oder den Prozess in einem neuen Fenster ausführen möchten.

Wenn Sie eine Reihe von Batch-Prozessen nacheinander ausführen möchten, rufen Sie sie einfach nacheinander auf.

cd /d "C:\Program Files (x86)\salesforce.com\Data Loader\bin" 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportDebitor 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ExportU1 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ExportU2 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ExportU3 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportKF 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportAPSO 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportAPGF 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" DeleteU1 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" DeleteU2 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" DeleteU3 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportU1 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportU2 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportU3 
exit /b 
0

Sie können eine Reihe von Prozessen ausführen, die in komplexer Weise mit dieser Methode aufeinander ab:

@echo off 

C:\ 
cd "C:\Program Files (x86)\salesforce.com\Data Loader\bin" 

rem Set indicator of "ImportDebitor active" 
echo X > ID.run 
start process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" ImportDebitor ^& del ID.run 

start parallel.bat ExportU1 WaitID DeleteU1 ImportU1 
start parallel.bat ExportU2 WaitID DeleteU2 ImportU2 
start parallel.bat ExportU3 WaitID DeleteU3 ImportU3 

Dies ist parallel.bat:

@echo off 

:nextArg 
if "%1" equ "" goto :EOF 

if %1 neq WaitID goto nextProc 
:waitID 
ping -n 4 localhost > NUL 
if exist ID.run goto waitID 
shift 
goto nextArg 

:nextProc 
call process.bat "C:\Program Files (x86)\salesforce.com\Data Loader\Schnittstelle" %1 
shift 
goto nextArg 

In Dieser Code ImportDebitor wird parallel zu ExportU1 (und ExportU2 und ExportU3) ausgeführt. Wenn ExportU1 endet, überprüft es, dass ExportDebitor beendet wurde, um DeleteU1 auszuführen, und danach wird ImportU1 ausgeführt. Die gleiche Verwaltung erfolgt mit den entsprechenden Prozessen "U2" und "U3".

Der Rest der Prozesse (ImportKF, ... APSO und ... APGF) kann ebenfalls in diesem Schema in ähnlicher Weise eingeführt werden.