none
ForEach-Object WaitForExit RRS feed

  • Вопрос

  • Расскажите мне, пожалуйста, как ForEach-Object заставить ожидать завершения выполнения команд, указанных в ключе -Process?

    Что я хочу сделать:
    Переконвертировать все wav-файлы из директории и поддиректорий во FLAC

    Как я пытаюсь делать:

    Get-ChildItem C:\Users\kf\Documents -Recurse -Include *.wav | ForEach-Object -Process {[Diagnostics.Process]::Start('c:\Program Files (x86)\Media\FLAC\flac.exe', '-8 -f $_')}


    Что я получаю:
    Все процессы flac.exe не ожидают завершения предыдущего flac.exe перед запуском. WaitForExit проблему не решит, т.к. ждать должен ForEach-Object, а не [Diagnostics.Process]::Start.


    http://kf.animasub.ru/cv/
    1 августа 2009 г. 9:50

Ответы

  • У меня тестовая утилита, в данном случае nconvetr.exe, запускается вновь только когда обработает предыдущий файл и закончит работу:

    get-childitem .\Pic\*.jpg | %{ nconvert -out png $_; start-sleep 2; "pause" }

    start-sleep 2; "pause" просто для того чтоб было наглядней. Может и флак будет ждать завершения?
    • Помечено в качестве ответа Kirill Nikolaev 2 августа 2009 г. 10:31
    1 августа 2009 г. 15:33
  • > "c:\Program Files (x86)\Media\FLAC\flac.exe"

    А не так:

    & 'c:\Program Files (x86)\Media\FLAC\flac.exe'

    Не?
    • Изменено 01MDM 2 августа 2009 г. 7:01
    • Помечено в качестве ответа Kirill Nikolaev 2 августа 2009 г. 10:32
    2 августа 2009 г. 6:59

Все ответы

  • У меня тестовая утилита, в данном случае nconvetr.exe, запускается вновь только когда обработает предыдущий файл и закончит работу:

    get-childitem .\Pic\*.jpg | %{ nconvert -out png $_; start-sleep 2; "pause" }

    start-sleep 2; "pause" просто для того чтоб было наглядней. Может и флак будет ждать завершения?
    • Помечено в качестве ответа Kirill Nikolaev 2 августа 2009 г. 10:31
    1 августа 2009 г. 15:33
  • Расскажите мне, пожалуйста, как ForEach-Object заставить ожидать завершения выполнения команд, указанных в ключе -Process?

    Что я хочу сделать:
    Переконвертировать все wav-файлы из директории и поддиректорий во FLAC

    Как я пытаюсь делать:

    Get-ChildItem C:\Users\kf\Documents -Recurse -Include *.wav | ForEach-Object -Process {[Diagnostics.Process]::Start('c:\Program Files (x86)\Media\FLAC\flac.exe', '-8 -f $_')}


    Что я получаю:
    Все процессы flac.exe не ожидают завершения предыдущего flac.exe перед запуском. WaitForExit проблему не решит, т.к. ждать должен ForEach-Object, а не [Diagnostics.Process]::Start.


    http://kf.animasub.ru/cv/

    Get-ChildItem C:\Users\kf\Documents -Recurse -Include *.wav | ForEach-Object -Process {[Diagnostics.Process]::Start('c:\Program Files (x86)\Media\FLAC\flac.exe', '-8 -f $_') | Out-Null}
    [http://www.sysadmins.lv] As always enjoy the automation of tools within the Windows-based, .NET aware, WPF accessible, multi-processes on the same IP / Port usage, admin's automation tool, powershell.exe! © Flowering Weeds
    • Предложено в качестве ответа Vadims PodansMVP 1 августа 2009 г. 18:12
    • Отменено предложение в качестве ответа Kirill Nikolaev 2 августа 2009 г. 10:31
    1 августа 2009 г. 18:12
  • Не помогло. Всё-равно все процессы одновременно запускаются


    http://kf.animasub.ru/cv/
    1 августа 2009 г. 21:24
  • У меня тестовая утилита, в данном случае nconvetr.exe, запускается вновь только когда обработает предыдущий файл и закончит работу:

    get-childitem .\Pic\*.jpg | %{ nconvert -out png $_; start-sleep 2; "pause" }

    start-sleep 2; "pause" просто для того чтоб было наглядней. Может и флак будет ждать завершения?

    Произошла ошибка при вызове метода, так как [System.String] не содержит метод с именем "op_Subtraction".

    В :строке:1 позиция:63

    + Get-ChildItem C:\Users\kf\Documents -Recurse -Include *.wav | % <<<< {"c:\Program Files (x86)\Media\FLAC\flac.exe" -8 -f $_; start-sleep 2; "pause"}


    http://kf.animasub.ru/cv/
    1 августа 2009 г. 21:28
  • > "c:\Program Files (x86)\Media\FLAC\flac.exe"

    А не так:

    & 'c:\Program Files (x86)\Media\FLAC\flac.exe'

    Не?
    • Изменено 01MDM 2 августа 2009 г. 7:01
    • Помечено в качестве ответа Kirill Nikolaev 2 августа 2009 г. 10:32
    2 августа 2009 г. 6:59
  • > "c:\Program Files (x86)\Media\FLAC\flac.exe"

    А не так:

    & 'c:\Program Files (x86)\Media\FLAC\flac.exe'

    Не?

    О, заработало! Правда в консоль выводятся следующие странные сообщения:

    Special.wav: 48% complete, ratio=0,739

    В :строке:1 позиция:65

    + Get-ChildItem C:\Users\kf\Documents -Recurse -Include *.wav | %{& <<<< 'c:\Program Files (x86)\Media\FLAC\flac.exe' -8 -f $_; start-sleep 2; "pause"}

    Вообще что делает это & ? Для меня это прям магия какая-то.


    http://kf.animasub.ru/cv/
    2 августа 2009 г. 10:31