如何使用PowerShell脚本从许多.PPT文件中提取媒体文件夹?

时间:2017-03-01 01:29:52

标签: powershell powerpoint

我有一堆powerpoint演示文稿,我需要提取每一个的图像。我注意到(通过使用WinRar打开PPT文件)它包含一个' Media'所有图像所在的文件夹。是否有任何形式来提取媒体'每个文件的文件夹,每个文件的单个文件夹?

1 个答案:

答案 0 :(得分:5)

我快速写了这个 ,所以如果有更好的方法,或者至少是一种更清洁的方式来完成你所追求的东西,我不会感到惊讶。它被编写为在存在和不存在嵌入式媒体文件夹的情况下工作。

出于测试目的,我的桌面上有一个名为pptx的文件夹,里面有四个* .pptx文件。快速脚本完成后,它为同一文件夹中的每个PowerPoint文件创建了一个文件夹。在每个文件夹中都是包含您所访问文件的媒体文件夹,或者是指示无法找到媒体文件夹的文本文件。同样,可能有一种更清洁的方式,但在此之前,这应该有效。

$Path = 'C:\users\tommymaynard\Desktop\pptx'
$Files = Get-ChildItem -Path $Path

Foreach ($File in $Files) {
    New-Item -Path $File.DirectoryName -ItemType Directory -Name $File.BaseName | Out-Null

If (Get-Command -Name Expand-Archive) {
    Expand-Archive -Path $File.FullName -OutputPath $File.FullName.Split('.')[0]

} Else {
    Add-Type -AssemblyName System.IO.Compression.FileSystem
    [System.IO.Compression.ZipFile]::ExtractToDirectory($File.FullName,$File.FullName.Split('.')[0])
} # End If-Else.

If (Test-Path -Path "$($File.FullName.Split('.')[0])\ppt\media") {
    Move-Item -Path "$($File.FullName.Split('.')[0])\ppt\media" -Destination $File.FullName.Split('.')[0]
    Get-ChildItem -Path $File.FullName.Split('.')[0] | Where-Object {$_.Name -ne 'media'} | Remove-Item -Recurse

} Else {
    Get-ChildItem -Path $File.FullName.Split('.')[0] | Remove-Item -Recurse
    New-Item -Path $File.FullName.Split('.')[0] -ItemType File -Name 'No media folder.txt' | Out-Null
} # End If-Else.
} # End Foreach.

编辑:使用.NET 所以比Expand-Archive快得多!如果您正在使用速度,并且您正在运行包含Expand-Archive的PowerShell版本,则将Get-Command -Name Expand-Archive更改为$ true -eq $ false以强制使用该.NET。要么是这样,要么只是转储第一个If-Else并取出.NET代码......如果您需要进一步的帮助,请告诉我们。

Edit2:我在自己的博客上写过这篇文章:http://tommymaynard.com/extract-media-folder-from-powerpoint-files-2017/。它有我的代码的更新版本。