2014-12-23 5 views
0

С помощью Google я собрал сценарий Powershell для автоматизации Handbrake.Скрипт Powershell не ждет файлов в папке ввода, выходит

Что он делает:

  1. Некоторые файлы загружаются автоматически через RSS. Они помещаются в исходную папку.
  2. Скрипт Powershell выполняет Handbrake, начинается и успешно завершается кодирование.
  3. Если новые файлы не поступают в исходную папку, сценарий завершается.

Вопрос с последним пунктом. Когда исходная папка пуста, сценарий Powershell выходит, но я хочу, чтобы он продолжал работать и обрабатывать больше файлов, когда они приходят, пока я не убью его. Когда новый файл добавляется, он должен автоматически запускать кодировку.

код в PasteBin, который имеет больше комментариев, но должно быть легко сделать вывод, что делает скрипт:

$inputpath = "I:\S" 
$outputpath = "I:\E" 

$movies = ls $inputpath 

foreach($movie in $movies){ 
    $name = $movie.basename 

    if(!(test-path -path "$outputpath\$name.mkv")){ 
     C:\"Program Files"\handbrake\HandBrakeCLI.exe -i "$inputpath\$movie" -o "$outputpath\$name.mkv" ` 
     -e x264 -b 1000 -2 -T -a 1,1 -E mp3 -B 112 --mixdown stereo -f mkv --detelecine --decomb ` 
     --loose-anamorphic -m -x rc-lookahead=30:ref=4:bframes=3:me=umh:subme=9:analyse=none:deblock=1:0:0:8x8dct=1 
    } 
} 
+0

Итак, вы просто ищете логику, которая учитывает, когда папка пуста? Можете работать лучше, если вы покажете нам код, с которым вы столкнулись. – Matt

+0

Я вижу ваш код, но не понимаю вашу проблему. Если исходная папка пуста, обрабатывать нечего, поэтому скрипт работает правильно. Что вы хотите? – Matt

+0

Да, дело в том, что если исходная папка пуста, она выходит! Я не хочу, чтобы он вышел, так как в то же время исходные файлы загружались из частного трекера! Когда новый файл добавляется, он должен автоматически запускать кодировку, но, как мы знаем, он выходит после того, как исходная папка пуста! Я просто хочу, чтобы он оставался работоспособным, даже если исходная папка пуста, а затем начните обработку, как только файл NEW будет получен в исходной папке. –

ответ

1

В комментариях вы описываете System.IO.FileSystemWatcher и Register-ObjectEvent, которые будут использоваться в качестве файлового сторожа. Никогда не играл с этим много до сих пор, но вот образец того, что вы ищете.

$inputpath = "I:\S" 
$outputpath = "I:\E" 

$watcher = New-Object System.IO.FileSystemWatcher 
$watcher.Path = $searchPath 
$watcher.IncludeSubdirectories = $true 
$watcher.EnableRaisingEvents = $true 

$created = Register-ObjectEvent $watcher "Created" -Action { 
    $name = $eventArgs.basename 

    if(!(test-path -path "$outputpath\$name.mkv")){ 
     C:\"Program Files"\handbrake\HandBrakeCLI.exe -i "$($eventArgs.FullName)" -o "$outputpath\$name.mkv" ` 
     -e x264 -b 1000 -2 -T -a 1,1 -E mp3 -B 112 --mixdown stereo -f mkv --detelecine --decomb ` 
     --loose-anamorphic -m -x rc-lookahead=30:ref=4:bframes=3:me=umh:subme=9:analyse=none:deblock=1:0:0:8x8dct=1 
    }  
} 

Основано на сообщении форума here. Поиск System.IO.FileSystemWatcher и Register-ObjectEvent может дать больше контекста для вас. Также вам может потребоваться проверить код ручного тормоза, поскольку он выглядел неправильно в вашем pastebin, и я попытался улучшить его для удобочитаемости.