2016-05-23 235 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)也可以以类似的方式引入此方案。