0

我有点像 Powershell 新手,我已经有目的地使用 PS 作为我的主要脚本语言大约 6 个月了。

我正在尝试仅使用 powershell 和 mediainfo 生成一个基本脚本,以将目录(输入)中的文件的详细信息解析到单个 .txt 文件的另一个目录(输出)(理想情况下,删除原始文件扩展名)。

源文件名和输出文件名应该相同,例如:test.mp4 -> test.txt. 这是我到目前为止所管理的:

$indir = "C:\Temp\input"
$outdir = "C:\Temp\output\"
$mediainfo = "C:\Temp\MediaInfo_CLI_x64\MediaInfo.exe "

$files = Get-ChildItem $indir

foreach ($file in $files )
    {
    Write-Host "Scanning " $file.FullName
    Start-Process $mediainfo $file.FullName -NoNewWindow | out-file $outdir $file.Name
    }

我遇到了很多问题,我觉得解决方案很简单。

感谢您的任何帮助。

4

2 回答 2

2

我已经为 MediaInfo 编译了一个 DLL 包装器,因此您可以像这样在 PowerShell 中使用它

add-type -path 'C:\Users\username\Documents\WindowsPowerShell\vise_mediainfo.dll'
$MediaInfo = New-Object VISE_MediaInfo.MediaInfo
#Display all codec info about this PC
$MediaInfo.Option("Info_Codecs")
#Display information about a specific file
$MediaInfo.Open('C:\Users\username\Videos\video_name.mp4')
$MediaInfo.Inform()

https://ianmorrish.wordpress.com/v-ise/mediainfo/下载

于 2016-09-15T01:52:31.203 回答
1

Start-Process has parameters for redirecting STDIN, STDOUT and STDERR, so try this:

Start-Process $mediainfo $file.FullName -NoNewWindow -Wait `
    -RedirectStandardOutput "$outdir\$($file.Name).txt"

Normally you'd launch external programs with the call operator (&), though, which should let you use the regular output streams:

& $mediainfo $file.FullName | Out-File "$outdir\$($file.Name).txt"

If the program doesn't write to the success output stream (STDOUT) you can redirect the other streams like this (see about_Redirection for details):

& $mediainfo $file.FullName *>&1 | Out-File "$outdir\$($file.Name).txt"
于 2013-11-18T12:09:41.270 回答