2014-12-23 12 views
0

Google의 도움을 받아 Handbrake 자동화를위한 Powershell 스크립트를 작성했습니다.Powershell 스크립트는 입력 폴더에있는 파일을 기다리지 않고 종료합니다.

가 무엇을 :

  1. 일부 파일은 RSS를 통해 자동으로 다운로드됩니다. 원본 폴더에 있습니다.
  2. Powershell 스크립트가 Handbrake를 실행하고 인코딩이 시작되고 성공적으로 끝난다.
  3. 원본 폴더에 새 파일이 도착하지 않으면 스크립트가 종료됩니다.

마지막 항목에 문제가 있습니다. 원본 폴더가 비어있을 때 Powershell 스크립트가 종료되었지만 파일을 죽일 때까지 계속 실행하고 더 많은 파일을 처리하려고합니다. 새 파일이 추가되면 인코딩이 자동으로 시작됩니다. 귀하의 의견에

$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

예, 원본 폴더가 비어 있으면 종료됩니다. 나는 그 동안 개인 추적기에서 다운로드되는 소스 파일을 종료하는 것을 원하지 않습니다! 새 파일이 추가되면 인코딩이 자동으로 시작되지만 알고 있듯이 소스 폴더가 비어있는 경우 종료됩니다. 소스 파일이 비어 있어도 새로운 파일이 소스 폴더에 도착하자 마자 처리를 시작하기 만하면됩니다. –

답변

1

당신이 파일 감시자로 사용할 수 System.IO.FileSystemWatcherRegister-ObjectEvent을 설명하고 있습니다 :

코드는 더 의견을 가지고 있지만 스크립트가 무엇을 추론하기 쉽게해야하는 PasteBin입니다. 지금까지는 그다지 연주 해본 적이 없지만, 당신이 찾고있는 샘플이 있습니다.

$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을 검색하면 더 많은 문맥을 제공 할 수 있습니다. 또한 핸드 브레이크 코드가 페이스트 인으로 잘못 표시되어 있는지 확인해야 할 수도 있습니다.이 코드는 가독성을 위해 개선하려고 시도했습니다.