Powershell MediaInfo читает файлы в директории
Я новичок в 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
}
У меня много проблем, и я чувствую, что решение довольно простое.
Спасибо за любую помощь.
2 ответа
Start-Process
имеет параметры для перенаправления STDIN, STDOUT и STDERR, поэтому попробуйте это:
Start-Process $mediainfo $file.FullName -NoNewWindow -Wait `
-RedirectStandardOutput "$outdir\$($file.Name).txt"
Обычно вы запускаете внешние программы с оператором вызова (&
), что должно позволить вам использовать обычные выходные потоки:
& $mediainfo $file.FullName | Out-File "$outdir\$($file.Name).txt"
Если программа не записывает в поток вывода успеха (STDOUT), вы можете перенаправить другие потоки следующим образом (подробнее см. About_Redirection):
& $mediainfo $file.FullName *>&1 | Out-File "$outdir\$($file.Name).txt"
Я скомпилировал оболочку DLL для MediaInfo, чтобы вы могли использовать ее в 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()