Я хочу, чтобы мой пакетный сценарий запускал пакетный сценарий, который не завершается, затем запускает еще несколько пакетных сценариев, которые завершаются, а затем закрывает первый пакетный сценарий.
Проблема в том, что первый пакетный скрипт, который я запускаю, должен установить соединение, прежде чем я смогу запустить другие, и чтобы определить, когда это будет сделано, мне нужно посмотреть вывод первого скрипта, который я запускаю, для строки, которая указывает, что соединение установлено.
В псевдокоде,
start first script
wait for first script to output specific string
while the first script remains running:
run several other scripts
close the first script
Эта строка появится только после печати нескольких предыдущих строк. Количество строк и время, которое это занимает, может варьироваться. Строки не выводятся все сразу. Я не могу изменить этот скрипт.
Желаемый результат таков:
C:\>first_batch_script.bat
Some line
Doing a thing
Winning the points
The Sims did this joke better
Connection established
certain string
C:\>other_batch_script.bat
other_batch_script is done!
C:\>another_batch_script.bat
another_batch_script is done!
C:\>REM kill first_batch_script.bat
Это код, который я пытаюсь:
FOR /f "tokens=* delims=" %%L IN ('first_batch_script.bat ^| find "certain string"') DO echo %%L
call other_batch_script.bat
call another_base_script.bat
REM kill first_batch_script.bat
Использование FOR /f
выглядит многообещающе, но когда я запускаю этот пакетный скрипт, он запускается довольно медленно и затем зависает. В любом случае, даже если он прошел, я не вижу хорошего способа выйти из цикла и продолжить выполнение моего кода
Использование START /WAIT
не помогает, потому что первый скрипт, который я запускаю, не завершается (и не должен) завершаться. Использование любого метода синхронизации просто не будет работать, потому что для установления соединения может потребоваться довольно много времени.
Итак, длинные и короткие