【问题标题】:Batch-Command, Specific Execution-Order and multiple commands批处理命令、特定执行顺序和多个命令
【发布时间】:2016-05-23 08:06:42
【问题描述】:

我正在尝试按特定顺序执行多个批处理命令。 在前 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

【问题讨论】:

    标签: batch-file batch-processing


    【解决方案1】:

    我认为不需要 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】:

      要等待进程完成,请使用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
      ...
      

      这是并行启动前两个进程,在启动第三个进程之前等待它们完成(并等待它完成)

      【讨论】:

      • 您好,感谢您的快速回答。但我认为我没有很好地解释它。我的目标是知道命令何时完成,因为我只想在“DeleteU1”和“ImportDebitor”完成时启动“ImportU1”命令。有没有办法让他们通过循环或类似的方式收听命令?
      • 为进程命名 (start "WaitForMeToFinish" process.bat "c:..." DeleteU1") and loop tasklist /fi "Windowtitle eq WaitForMeToFinish"` 直到找不到实例。
      • 已编辑以向您展示如何操作。适应您的需求。
      【解决方案3】:

      您可以使用此方法以复杂的方式执行一系列相互依赖的进程:

      @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)也可以以类似的方式引入此方案中。

      【讨论】:

        猜你喜欢
        • 2010-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-01
        相关资源
        最近更新 更多