目录中每个文件的Powershell和mediainfo命令
我正在尝试为文件夹中的多个媒体文件执行以下命令:目录中每个文件的Powershell和mediainfo命令,powershell,scripting,mediainfo,Powershell,Scripting,Mediainfo,我正在尝试为文件夹中的多个媒体文件执行以下命令:\mediainfo.exe--Output=XML“$path\file\*.*”>。\file\$Output.XML。以下是我目前拥有的: $path = get-item F:\Desktop\work\ cd $path $output = (Get-ChildItem '.\file\*.*').Basename .\mediainfo.exe --Output=XML "$path\file\*.*" > .
\mediainfo.exe--Output=XML“$path\file\*.*”>。\file\$Output.XML
。以下是我目前拥有的:
$path = get-item F:\Desktop\work\
cd $path
$output = (Get-ChildItem '.\file\*.*').Basename
.\mediainfo.exe --Output=XML "$path\file\*.*" > .\file\$output.xml
我的问题是MediaInfo.exe将创建一个XML输出文件,其中包含文件夹F:\Desktop\work\file中所有媒体的所有信息
我尝试了以下方法:
$path = get-item F:\Desktop\work\
$dir = get-item $path\file | ? {$_.PSIsContainer}
cd $path
$output = (Get-Item '.\file\*.*').Basename
ForEach ($d in $dir){.\mediainfo.exe --Output=XML "$d" > .\file\$output.xml
}
但同样的事情。output.xml的名称将与所有媒体名称连接。例如,如果我有两个文件名
audio1.aif和audio2.aif,我的XML的名称将是audio1 audio2.XML
你知道怎么做到吗?谢谢也许我遗漏了问题中的某些内容,但是因为有一个sidecar XML文件,其文件名为源文件名+“.XML”,这个小脚本可以:
ForEach ($d in get-item "file\*.*"){
.\mediainfo.exe --Output=XML "$d" > "$d.xml"
}
注意:生成的MediaInfo XML将具有绝对文件名(包括路径),因为绝对文件名是提供给MediaInfo的。如果您更喜欢相对文件名(没有当前路径,也没有包含文件的目录名),则需要提供相对文件名:
$current = (Get-Item .).FullName
cd file
ForEach ($d in Get-Item "*.*"){
$filename = Split-Path "$d" -Leaf
..\mediainfo.exe --Output=XML $filename > "$d.xml"
}
cd $current
如果想要不带源文件扩展名的XML文件(不推荐,如果您得到两个具有相同基本名称的文件(例如,a.avi和a.srt),则第一个文件需要一个中间变量:
$current = (Get-Item .).FullName
cd file
ForEach ($d in Get-Item "*.*"){
$filename = Split-Path "$d" -Leaf
#$basename = Split-Path "$d" -LeafBase #Only in newest versions
$basename = (Get-Item -Path "$d").BaseName
..\mediainfo.exe --Output=XML $filename > "$basename.xml"
}
cd $current
文件夹名称和预期的输出文件名之间是否有任何关系?不是文件夹名称,而是输出文件必须命名为文件夹中的媒体文件。这两个命令都非常有效,谢谢!您知道如何在没有媒体文件扩展名的情况下获取XML名称吗?我的XMLs中有media.mp4.xml。要删除扩展名(不推荐,如果第一个文件中有两个基本名称相同的文件,例如a.avi和a.srt,则会出现问题),请将“-Leaf”替换为“-LeafBase”,请参阅。谢谢!这不会发生,因为我只有一种具有唯一名称的文件类型。再次感谢。编辑:不起作用:我太快了,看起来该选项只在最新版本中可用+结果不好,因为我修改了输入名称而不是输出名称。我用一个额外的例子修改了答案。