Rozwiązanie jpe wymaga od rodzica wsadu, aby wiedzieć, kiedy rozpoczęte procesy zostały zakończone, zanim będzie można sprawdzić rozmiary plików wyjściowych. Możesz użyć opcji START/WAIT, ale stracisz przewagę równoległego działania.
Możesz użyć faktu, że przekierowanie do pliku nie powiedzie się, jeśli inny proces już przekierował dane wyjściowe do tego samego pliku. Kiedy twoja nadrzędna grupa może przekierować do nich z powodzeniem, wiesz, że wszystkie rozpoczęte procesy zostały zakończone.
Prawdopodobnie powinien przekierować stderr do pliku wyjściowego, jak i stdout
@echo off
::start the processes and redirect the output to the ouptut files
start /b "" cmd /c prog.exe cmdparam1 cmdparam2 >test1.txt 2>&1
start /b "" cmd /c prog.exe cmdparam1 cmdparam2 >test2.txt 2>&1
::define the output files (must match the redirections above)
set files="test1.txt" "test2.txt"
:waitUntilFinished
:: Verify that this parent script can redirect an unused file handle to the
:: output file (append mode). Loop back if the test fails for any output file.
:: Use ping to introduce a delay so that the CPU is not inundated.
>nul 2>nul ping -n 2 ::1
for %%F in (%files%) do (
9>>%%F (
rem
)
) 2>nul || goto :waitUntilFinished
::Delete 0 length output files
for %%F in (%files%) do if %%~zF==0 del %%F
Wystarczy [usunąć wszystkie pliki z zerowej długości] [1]. Polecenia "start" można przeplatać za pomocą poleceń "start". To znaczy. coś takiego: [1]: http://stackoverflow.com/questions/4176962/recursively-delete-0kb-files-using-windows-cmd – jpe
@jpe - to wydaje się być jedyną możliwą odpowiedzią, jeśli chcesz obsłużyć go w całości w DOS. Powinieneś opublikować ją jako odpowiedź, aby mogła być oznaczona jako "poprawna". –
Stack Overflow zmienił moją odpowiedź na komentarz, ponieważ była za krótka. Więc opracowałem nieco :) – jpe