2017-03-01 29 views
-2

我有一堆幻燈片演示文稿,我需要提取每個人的圖像。我注意到(通過用WinRar打開PPT文件)它包含所有圖像所在的「媒體」文件夾。是否有任何形式可以爲每個文件的每個文件提取「Media」文件夾,然後爲每個文件提取一個文件夾?如何使用PowerShell腳本從很多.PPT文件中提取媒體文件夾?

+0

您可以確認文件是ppt文件而不是pptx嗎? –

+0

@JamesC。由於Daniel可以用WinRar打開它們並查看媒體文件夾,它們必須是.pptx而不是.ppt文件。有時候用戶(也在這裏看我自己)使用PPT作爲PowerPoint的縮寫而不是文件擴展名。 –

+0

沒錯,它們都是PPTx。 –

回答

3

我寫了這個真的是很快,所以我不會感到驚訝,如果有更好的方法,或者至少是一個更清晰的方式來完成你以後的事情。它被寫入在有和沒有嵌入式媒體文件夾的情況下工作。

出於測試目的,我在桌面上有一個名爲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的PowerShell版本,那麼請將Get-Command-NAME展開 - 歸檔更改爲$ true -eq $ false,以強制使用.NET。要麼,要麼只是轉儲第一個If-Else並拔出.NET代碼...請告訴我們您是否需要進一步的幫助。

編輯2:我在自己的博客上寫了這篇文章:http://tommymaynard.com/extract-media-folder-from-powerpoint-files-2017/。它有我的代碼的更新版本。

相關問題