2016-05-23 354 views
0

我試圖按特定順序執行多個批處理命令。 在開始前4個命令後,每個命令的結束應該觸發另一個命令的開始。批處理命令,特定執行順序和多個命令

例如: 一旦命令「ExportU1」完成後,命令「DeleteU1」應該開始並在那之後「ImportU1」。

我應該怎麼做和/或是否有一種更有效的方式來調用每個命令?

我當前的代碼:

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

回答

0

等待進程結束,使用start /wait

當你問一個更有效的方法:

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 

編輯:

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 
... 

這是開始前兩個進程並行的,等待他們兩人開始了第三個前完成(並等待它完成)

+0

嘿,謝謝你的快速回答。但我想我沒有很好地解釋它。我的目標是知道一個命令何時完成,因爲只有在「DeleteU1」和「ImportDebitor」完成後我纔會啓動「ImportU1」命令。有沒有辦法讓他們通過循環或類似的東西來聽命令? –

+0

給進程一個名稱('start「WaitForMeToFinish」process.bat「c:...」DeleteU1「)和循環'tasklist/fi」Windowtitle eq WaitForMeToFinish「'直到找不到實例。 – Stephan

+0

10做到這一點,適應您的需求。 – Stephan

0

我沒有看到任何需要START。如果要並行運行進程,或者想要在新窗口中運行進程,則只需要這樣做。

如果要按順序運行一系列批處理,則只需按順序調用它們即可。

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

您可以執行一系列的流程,以複雜的方式依賴於對方使用這種方法:

@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 

這是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 

在此代碼ImportDebitorExportU1(和ExportU2ExportU3)並行執行。當ExportU1結束時,它會檢查ExportDebitor已結束以執行DeleteU1,之後它將運行ImportU1。使用「U2」和「U3」相應的過程完成相同的管理。

其他進程(ImportKF,... APSO和... APGF)也可以以類似的方式引入此方案。