Лучший отвечающий
ForEach-Object WaitForExit

Вопрос
-
Расскажите мне, пожалуйста, как 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