Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
目录中每个文件的Powershell和mediainfo命令_Powershell_Scripting_Mediainfo - Fatal编程技术网

目录中每个文件的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”,请参阅。谢谢!这不会发生,因为我只有一种具有唯一名称的文件类型。再次感谢。编辑:不起作用:我太快了,看起来该选项只在最新版本中可用+结果不好,因为我修改了输入名称而不是输出名称。我用一个额外的例子修改了答案。