Powershell脚本不等待输入文件夹中的文件存在

时间:2014-12-23 00:45:46

标签: powershell handbrake

在Google的帮助下,我为Handbrake自动化制作了一个Powershell脚本。

它的作用:

  1. 有些文件是通过RSS自动下载的。它们放在源文件夹中。
  2. Powershell脚本执行Handbrake,编码开始并成功结束。
  3. 如果源文件夹中没有新文件到达,则退出脚本。
  4. 问题在于最后一项。当源文件夹为空时,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
        }
    }
    

1 个答案:

答案 0 :(得分: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
    }    
}

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