Запустите внешнюю программу с параметрами и дождитесь ее окончания в Powershell

На самом деле, я нашел так много решений этого вопроса, но ни один не работает. Программа, которую я хотел бы запустить в Powershell, - это Reaper - цифровая аудиостанция, и я собираюсь использовать инструмент командной строки для пакетной обработки аудиофайлов в сценарии PS. Код, связанный с Reaper, выглядит следующим образом:

reaper -batchconvert $output_path\audio\Reaper_filelist.txt

Я собираюсь использовать Start-Process с -wait параметр, позволяющий моему сценарию ждать его завершения, а затем перейти к следующей строке кода, которая является Rename-Item функция.

ls $processed_audio_path | Rename-Item -NewName {$_.name.Replace("- ", "")}

Если PS не ожидает завершения процесса, то следующая строка выдаст ошибку, что-то вроде "такой файл не найден в каталоге".

Предложения, которые я нашел, здесь, здесь и здесь. Но ничего из этого не работает. Проблема в том, что Reaper не принимает аргумент, который будет добавлен отдельно, как:

$exe = "reaper"
$arguments = "-batchconvert $output_path\audio\Reaper_filelist.txt"
Start-Process -filepath $exe -argumentlist $arguments -wait

или же:

Start-Process -filepath reaper -argumentlist "-batchconvert $output_path\audio\Reaper_filelist.txt" -Wait

или же:

Start-Process -filepath reaper -argumentlist @("-batchconvert", "$output_path\audio\Reaper_filelist.txt") -Wait

Он может работать без проблем только как целый блок, как первая строка кода выше. Так что я могу сделать сейчас?

2 ответа

Я нашел решение этой проблемы.
Я думаю, что мне нужно описать больше контекста по этому поводу. Я всегда запускаю Reaper с моим Windows в фоновом режиме, когда скрипт вызывает функцию Reaper BatchConvert, он запускает другой экземпляр Reaper, поэтому я получил 2 его экземпляра при конвертации аудио файлов. Это - примеры Reaper - может быть надежным условием для ограничения следующего кода. Я нашел что-то полезное здесь и здесь.

Наконец, я получил свой код, как это, и он работает:

# Batch converting through Reaper FX Chain
reaper -batchconvert $output_path\audio\Reaper_filelist.txt
while (@(Get-Process reaper).Count -eq 2){
    Start-Sleep -Milliseconds 500
    }
# Correct the Wrong file name produced by Reaper
ls $processed_audio_path | Rename-Item -NewName {$_.name.Replace("- ", "")}

Как упоминается в одном комментарии, может случиться так, что процесс запускает другой процесс, заставляя powershell перемещаться в сценарии. Если это так, у вас может быть оператор while для ожидания создания файла.

while (!(Test-Path "$output_path\audio\Reaper_filelist.txt")) { Start-Sleep 10 }
Другие вопросы по тегам