1

我正在尝试使用 ShellExecuteEx 在同一命令行中运行多个任务。我在cmd.exe中运行没有问题,如下图:

    C:\Program Files (x86)\AppFolder>App.exe MyTask1&&App.exe MyTask2

    Running task: Task1
    Table: Task1 100
    Complete

    Running task: Task2
    Table: Task2 100
    Complete

    C:\Program Files (x86)\AppFolder>

现在,这是我在 Delphi 中运行一项任务的 ShellExecuteEx 版本,没有任何问题:

    procedure TfrmGTX.btnQBSyncClick(Sender: TObject);
     var
       FileName, Parameters, Folder, Directory: string;
       sei: TShellExecuteInfo;
       Error: DWORD;
       OK: boolean;
     begin
       Folder := 'C:\Program Files (x86)\AppFolder\';
       FileName := Folder + 'App.exe';
       Parameters := 'MyTask1';
       ZeroMemory(@sei, SizeOf(sei));
       sei.cbSize := SizeOf(sei);
       sei.lpFile := PChar(FileName);
       sei.lpParameters := PChar(Parameters);
       sei.lpDirectory := PChar(Folder);
       sei.nShow := SW_SHOWNORMAL;
       OK := ShellExecuteEx(@sei);
       if not OK then
         begin
           Error := GetLastError;
           ShowMessage('Error: ' + IntToStr(Error));
         end;
     end;

我想要实现的是使用 ShellExecuteEx 一个接一个地运行 2 个任务。它们之间没有先决条件/关系。它的功能相同,但将数据提供给我数据库中的不同表。

我的问题是:

  1. 是否可以在参数中的 1 个 ShellExecuteEx 命令中运行这 2 个任务?如果是这样,在参数内执行此操作的最佳方法是什么?
  2. 或者我应该创建一个 for 循环来一个接一个地运行这两个任务?
  3. 或者有什么建议?

我更喜欢第一个,因为它更干净并且在 ShellExecuteEx 的功能范围内。

我看过一些作品说我应该单独运行它们或创建一些脚本。


这是@Alex_89 共享的 ExecuteDOSOutput 的结果。因此,到目前为止,它在一个触发器中运行多个任务,并且能够在 MyApp TMemo 中捕获结果。除了结果与我的预期不同:

Running task: Task1

Table: A_SALES 0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘100◘◘◘100◘◘◘100◘◘◘100
Complete
Running task: Task2

Table: A_OUTPUTVAT 0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘0% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘1% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘2% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘3% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘4% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘5% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘6% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘7% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘8% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘9% ◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘10%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘11%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘12%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘13%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘14%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘15%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘16%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘17%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘18%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘19%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘20%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘21%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘22%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘23%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘24%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘25%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘26%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘27%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘28%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘29%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘30%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘31%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘32%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘33%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘34%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘35%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘36%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘37%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘38%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘39%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘40%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘41%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘42%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘43%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘44%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘45%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘46%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘47%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘48%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘49%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘50%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘51%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘52%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘53%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘54%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘55%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘56%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘57%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘58%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘59%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘60%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘61%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘62%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘63%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘64%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘65%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘66%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘67%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘68%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘69%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘70%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘71%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘72%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘73%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘74%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘75%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘76%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘77%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘78%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘79%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘80%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘81%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘82%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘83%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘84%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘85%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘86%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘87%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘88%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘89%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘90%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘91%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘92%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘93%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘94%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘95%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘96%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘97%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘98%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘99%◘◘◘100◘◘◘100◘◘◘100◘◘◘100
Complete
Running task: Task3

Table: Customer 
Complete

我期望获得实时的进步百分比,例如我在 CMD.exe 中运行它时得到的。

Running task: Task1
Table: Task1 100        //progress % shown here
Complete

Running task: Task2
Table: Task2 100        //progress % shown here
Complete

Running task: Task3
Table: Task2 100        //progress % shown here
Complete

我的意图是从 CMD.exe 实时捕获进度%,并将其作为进度条或其他内容嵌入到 MyApp 中,这样我就可以触发完成并允许用户继续。

我只是希望是否有人可以帮助我从 CMD.exe 实时捕获进度%?

4

1 回答 1

2

几年前,当我试图获取 DOS 命令的输出时,我遇到了这个片段。也许它会帮助您解决手头的问题。您只需调用此过程,您传递的任何命令都将被执行。我已经通过超过 1 个命令(由 & 连接)对其进行了测试,并且效果很好。例如:

ExecuteDOSCommand('getmac & ipconfig & vol', Output);

这是执行 DOS 命令的另一种方式。我知道,代码很长而且有点难以理解,但它也可能对你有所帮助。试试看。您不需要更改任何内容,只需使用您自己的参数调用该过程。这是片段:

procedure TForm1.ExecuteDOSCommand(Command: String; Output: TStrings; TimeOut: Int64 = 0);
var
  ProcessStartupInfo: STARTUPINFO;
  SecurityAttributes: SECURITY_ATTRIBUTES;
  SecurityDescriptor: SECURITY_DESCRIPTOR;
  ProcessInformation: PROCESS_INFORMATION;
  PipeReadHandle, PipeWriteHandle: THandle;
  BytesRead, ExitCode: Cardinal;
  Buffer, UnicodeOutput: array[0..4095] of Char;
  NormalizedStr, FullOutputStr: String;
  EndingWaitTime: TDateTime;

  function IsWinNT: Boolean;
  var
    OSVerInfo: OSVERSIONINFO;
  begin
    OSVerInfo.dwOSVersionInfoSize := SizeOf(OSVerInfo);
    GetVersionEx(OSVerInfo);
    Result := OSVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT;
  end;

begin
  Output.Clear;

  if IsWinNT then
  begin
    InitializeSecurityDescriptor(@SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION);
    SetSecurityDescriptorDacl(@SecurityDescriptor, True, nil, False);
    SecurityAttributes.lpSecurityDescriptor := @SecurityDescriptor;
  end
  else
    SecurityAttributes.lpSecurityDescriptor := nil;

  SecurityAttributes.nLength := SizeOf(SECURITY_ATTRIBUTES);
  SecurityAttributes.bInheritHandle := True;

  if CreatePipe(PipeReadHandle, PipeWriteHandle, @SecurityAttributes, 0) then
    try
      GetStartupInfo(ProcessStartupInfo);

      with ProcessStartupInfo do
      begin
        dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
        wShowWindow := SW_HIDE;
        hStdInput := PipeReadHandle;
        hStdOutput := PipeWriteHandle;
        hStdError := PipeWriteHandle;
      end;

      Fillchar(Buffer, SizeOf(Buffer), #0);
      GetEnvironmentVariable('ComSpec', @Buffer, SizeOf(Buffer));
      StrCat(@Buffer, PChar(' /c ' + Command));

      if CreateProcess(nil, @Buffer, nil, nil, True, CREATE_NEW_CONSOLE, nil, nil, ProcessStartupInfo, ProcessInformation) then
      begin
        CloseHandle(ProcessInformation.hThread);
        EndingWaitTime := IncMilliSecond(Now, TimeOut);

        repeat
          PeekNamedPipe(PipeReadHandle, @Buffer, SizeOf(Buffer), @BytesRead, nil, nil);

          if BytesRead > 0 then
          begin
            Fillchar(Buffer, SizeOf(Buffer), #0);
            ReadFile(PipeReadHandle, Buffer, BytesRead, BytesRead, nil);
            FillChar(UnicodeOutput, SizeOf(UnicodeOutput), #0);
            OemToChar(@Buffer, UnicodeOutput);
            NormalizedStr := StringReplace(UnicodeOutput, '♪', #13, [rfReplaceAll]);
            NormalizedStr := StringReplace(NormalizedStr, '◙', #10, [rfReplaceAll]);
            FullOutputStr := FullOutputStr + NormalizedStr;
          end;

          GetExitCodeProcess(ProcessInformation.hProcess, ExitCode);
        until ((ExitCode <> STILL_ACTIVE) and (BytesRead = 0)) or ((TimeOut > 0) and (EndingWaitTime < Now));

        CloseHandle(ProcessInformation.hProcess);
        Output.Text := FullOutputStr;
      end;
    finally
      CloseHandle(PipeReadHandle);
      CloseHandle(PipeWriteHandle);
    end;
end;

假设您的表单上有一个名为 Button1 的按钮和一个名为 Memo1 的备忘录,您可以为 Button1 的 OnClick 事件编写此事件处理程序。这是如何使用此过程的实际示例代码:

procedure TForm1.Button1Click(Sender: TObject);
var
  Output: TStrings;
begin
  Output := TStringList.Create;
  try    
    ExecuteDOSCommand('getmac & ipconfig & vol', Output);
    Memo1.Lines := Output;
  finally
    Output.Free;
  end;
end;

顺便说一句,这是我当前示例的“使用”子句:

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ComCtrls, DateUtils;

请注意我是如何在“uses”子句中包含 DateUtils 单元的。这对于片段中的特定函数调用 (IncMilliSecond(Now, TimeOut);) 是必需的。其余的“用途”取决于您的需要。

于 2018-01-14T20:00:12.397 回答