我正在尝试按特定顺序执行多个批处理命令。 在前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 :(得分: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
...
这是开始并行的前两个进程,等待它们在启动第三个进程之前完成(并等待它完成)
答案 1 :(得分: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
答案 2 :(得分: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
在此代码中,ImportDebitor
与ExportU1
(以及ExportU2
和ExportU3
)并行执行。当ExportU1
结束时,会检查ExportDebitor
是否已结束以执行DeleteU1
,然后运行ImportU1
。使用“U2”和“U3”相应的流程完成相同的管理。
其他流程(ImportKF,... APSO和... APGF)也可能以类似的方式引入此方案。