【发布时间】:2011-04-18 20:52:03
【问题描述】:
所以我一直在使用 Handbrake 命令行对我的视频集进行编码以存储在我的 NAS 上,这样我就可以在我的 HTPC 上使用它。我一直在寻找一种既可以将其输出到屏幕的方法,以便我可以在其编码时看到它的输出,也可以输出到一个文件,以便我可以返回并查看特定的编码会话。
我的解决方案是使用一个 Powershell 窗口运行编码并输出到文件,然后使用另一个 Powershell 窗口读取日志文件并将其显示在屏幕上。这行得通,但我想改进它,因为它并不完美。因为读取文件脚本以设定的间隔读取,所以它会丢失行。此外,如果我减少间隔,它会对系统性能产生影响,使编码运行得更慢。有没有办法可以将第一个窗口的输出重定向到文件和屏幕?
第一个名为“Convert1.ps1”的 powershell 脚本(启动编码的脚本)(从手刹安装目录运行):
net time \\ODIN |find "Current time"
./HandbrakeCLI.exe -i "<input file>" -o "<output file>" <handbrake parameters>
要输出到文件的第二个 powershell 脚本,名为“Start_Convert.ps1”:
d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Completed\Movies\9.29.2010.log
要从该日志文件中读取的第三个 powershell 脚本,名为“Watch_Output.ps1”:
while (1)
{
(Get-Content d:\Conversions\Completed\Movies\9.29.2010.log)[-1]
Start-sleep 5
}
理想情况下,我希望将这一切归结为一个运行单个脚本以启动编码、输出到文件并在屏幕上显示的 powershell 窗口。
编辑(添加解决方案): 两种不同的方法,我选择后者,因为它更简单。
方式 #1 - 开始工作 生成的脚本开始我的转换:
Start-Job -Name VideoConvert -ScriptBlock { d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Movies\Movie.log }
Get-FileTail -Wait Encoding Unicode -Path D:\Conversions\Completed\Movies\Movie.log
方式 #2 - Tee 对象 生成的脚本开始我的转换:
d:\Conversions\Convert.ps1 2>&1 |Tee-Object -File D:\Conversions\Completed\Movies\Movie.log
再次感谢大家。这就像我想要的那样工作。
【问题讨论】:
标签: powershell exe output-redirect