Die JpE-Lösung erfordert, dass Ihre übergeordnete Stapelverarbeitung über die abgeschlossenen Prozesse informiert ist, bevor die Größe der Ausgabedatei überprüft werden kann. Sie können die START/WAIT-Option verwenden, aber dann verlieren Sie den Vorteil der parallelen Ausführung.
Sie können die Tatsache verwenden, dass die Umleitung zu einer Datei fehlschlägt, wenn ein anderer Prozess die Ausgabe bereits an dieselbe Datei umgeleitet hat. Wenn Ihr Eltern-Batch erfolgreich zu ihnen umleiten kann, wissen Sie, dass alle gestarteten Prozesse abgeschlossen sind.
Sie wahrscheinlich sollte stderr auf Ihre Ausgabedatei umleiten sowie 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
Nur [löschen Sie alle Dateien mit der Länge Null] [1]. Sie können diese Befehle mit den "Start" -Befehlen verschachteln. I.e. etwas wie: [1]: http://stackoverflow.com/questions/4176962/recursively-delete-0kb-files-using-windows-cmd – jpe
@jpe - das scheint wie die einzig mögliche Antwort, wenn Sie wollen um es vollständig in DOS zu handhaben. Sie sollten es als Antwort posten, damit es als "richtig" markiert werden kann. –
Stack Overflow änderte meine Antwort in einen Kommentar, weil es zu kurz war. Also habe ich ein wenig ausgearbeitet :) – jpe