0

在 Google 的帮助下,我为 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
    }
}
4

1 回答 1

1

在您的评论中,您正在描述System.IO.FileSystemWatcherRegister-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
    }    
}

基于此处的论坛帖子。搜索System.IO.FileSystemWatcherRegister-ObjectEvent可能为您提供更多背景信息。此外,您可能需要检查手刹代码,因为它在您的 pastebin 中看起来错误,我试图改进它以提高可读性。

于 2014-12-23T15:28:33.100 回答