2014-07-23 91 views
0

我正在嘗試編寫我的第一個PowerShell GUI。基本上我試圖運行一個ffmpeg命令,這是好的,但我無法運行進度條。 (我是全新的)這是我的嘗試。PowerShell進度條不會顯示

cd C:\Users\brett\Documents\convert 
$cmd = 'ffmpeg.exe' 
$arg0 = '-i' 
$arg1 = 'MASH_01.ts' 
$arg2 = '-c:v' 
$arg3 = '-c:a' 
$arg4 = 'MASH_01.mp4' 
$cf = 'copy' 
$isFile = 'MASH_01.mp4' 
if (-not(Test-Path -Path $isFile) -eq $false) { 
    echo "Shit Go" 
    del $isFile 

     & $cmd $arg0 $arg1 $arg2 $cf $arg3 $cf $arg4 
    for ($i = 1; $i -le 100; $i++) { 
    Start-Sleep -m 100 
    Write-Progress -Activity 'Progress Of The Coversion' -Status "$i Percent Complete" -PercentComplete $i; 
    } 
} else { 
& $cmd $arg0 $arg1 $arg2 $cf $arg3 $cf $arg4 
    for ($i = 1; $i -le 100; $i++) { 
    Start-Sleep -m 100 
    Write-Progress -Activity 'Progress Of The Coversion' -Status "$i Percent Complete" -PercentComplete $i; 
    } 
} 

更新:沒有錯誤輸出,我可以看到,但該文件已被處理後,不會在進度條運行。

這裏是我的最新嘗試..但現在我得到的ffmpeg說: 「M」 不是一個有效的開關

cd C:\Users\brett\Documents\convert 
$oldVideo = Get-ChildItem -Include @("*.ts") 
Write-Host -ForegroundColor Green -Object $ArgumentList; 
# Pause the script until user hits enter 
$isFile = 'MASH_01.mp4' 
if(-not(Test-Path -Path $isFile) -eq $false) { 
    echo "Shit Go" 
    del $isFile 
    }a 
    $tool = ffmpeg.exe 
$ArgumentList = '`-i'+' '+'MASH_01.ts'+' '+'-c:v'+' '+'copy'+' '+'-c:a'+' '+'copy'+' '+'MASH_01.mp4'; 
Invoke-Expression $tool $ArgumentList 
for($i = 1; $i -le 100; $i++){ 
    ffmpeg $ArgumentList -m 100 

    Write-Progress -Activity 'Progress Of The Coversion' -Status "$i Percent Complete" -PercentComplete $i 
    `-SecondsRemaining $a -CurrentOperation 
    "$i% complete" ` 

    } 
+0

你有語法錯誤?你的堆棧跟蹤變量爲'$ i0' – arco444

+0

是的,我刪除了0,但仍然沒有運氣 – Brett

+0

arco444 scipt運行,但只在PowerShell內部,進度條在文件處理後運行。不像它應該處理,因爲它應該 – Brett

回答

1

要查看進度功能使用:

cls 
for($i =1; $i -le 100 ; $i++){ 
Start-Sleep -m 100 
Write-Progress -Activity 'Progress Of The Conversion' -Status "$i Percent Complete" -PercentComplete $i 
} 

更換啓動使用您自己的代碼調用cmdlet,理想情況下可以計算百分比:

http://blogs.technet.com/b/kpalmvig/archive/2013/10/29/easy-progress-bar-in-your-powershell-scripts.aspx

例子: 1.把你的命令在一個txt文件 - 每行一個 - 你不需要在文本文件中 2.使用此代碼&運行:

cls 
    $file = get-content 'c:\yourFolder\yourTextFile.txt' 

    $i = 1 
    foreach($line in $file) { 

     $pct = (($i/$file.count) * 100) 
     Write-Progress -activity "Processing...$i" -status "Progress: $([int]$pct)%" -PercentComplete $pct 

     &"$line" 

     $i++ 

} 
+0

這似乎是我的問題,即時通訊不知道什麼來代替開始睡眠,它仍然運行後的文件已處理。我是否需要使用Get-Process在運行時顯示進度條?我該怎麼做? – Brett

+0

用ffmpeg 的代碼替換啓動 - 睡眠但是,如果它只是一個文件,那麼由於您沒有收到ffmpeg返回的事件,進度條並不會告訴您太多,所以就我所知,如果您正在執行一批ffmpeg命令,則進度條有意義,那麼您可以在每個命令完成時報告進度。 – Jimbo

+0

這是預定的目標,這只是第一個命令,我有4個其他人來此之後 – Brett