Запустите внешнюю программу с параметрами и дождитесь ее окончания в Powershell - PullRequest
0 голосов
/ 25 декабря 2018

На самом деле, я нашел так много решений этого вопроса, но ни один не работает.Программа, которую я хотел бы запустить в 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 ]

0 голосов
/ 26 декабря 2018

Я нашел решение этой проблемы.
Я думаю, что мне нужно описать больше контекста по этому поводу.У меня всегда был запущен 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("- ", "")}
0 голосов
/ 25 декабря 2018

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

while (!(Test-Path "$output_path\audio\Reaper_filelist.txt")) { Start-Sleep 10 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...