我有超过 900 个 MS Word 文件需要导出其中的图片。我已将一些文件导出为 HTML,但对于 900 多个文件来说,这是一个缓慢而漫长的过程。
我之前在这里找到了一个 Powershell 脚本,但它不起作用。我有 Windows 10 和 Office 365,所以我不确定脚本是否需要更新。
这是 Powershell 脚本 convertdoc.ps1
param([string]$docpath,[string]$htmlpath = $docpath)
$srcfiles = Get-ChildItem $docPath -filter "*.doc"
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat], "wdFormatFilteredHTML");
$word = new-object -comobject word.application
$word.Visible = $False
function saveas-filteredhtml
{
$opendoc = $word.documents.open($doc.FullName);
$opendoc.saveas([ref]"$htmlpath\$doc.fullname.html", [ref]$saveFormat);
$opendoc.close();
}
ForEach ($doc in $srcfiles)
{
Write-Host "Processing :" $doc.FullName
saveas-filteredhtml
$doc = $null
}
$word.quit();
我从命令提示符调用以下命令:
powershell -ExecutionPolicy RemoteSigned -File "c:\convertdoc.ps1" "c:\1" "c:\1-output"
有没有更好的方法,或者什么?这些文件位于大约 60 个文件夹中,因此理想情况下,我可以指向顶部文件夹,它将创建输出文件夹和子文件夹并递归导出。
答案1
虽然 Powershell 是完成这项任务的一个有用工具,但有关您当前代码的问题尚不清楚。
正如评论所建议的,如果您的文件是 .docx(而不是 .doc),您可以将文件扩展名重命名为 .zip。打开 zip 文件后,您会找到一个包含文档中使用的图像的文件夹。我们可以使用 Powershell 将文档重命名为 .zip,提取每个 zip 文件,然后获取所有图像文件。
以下解决方案涉及创建/删除临时目录,虽然不是理想的解决方案,但却是一个不错的简单解决方案。在使用此解决方案之前,请务必备份您的文件。-WhatIf
包含该参数是为了安全措施,以防有人错误地使用此代码。您可以自行决定是否删除它。
# put your documents here
$documents = "C:\documents\"
# your images will be stored here
$images = "C:\images\"
Set-Location $documents
# rename all docx files to zip files, then extract the zips to directories
Get-ChildItem $documents *.docx | % {
Rename-Item $_ ($_.BaseName + ".zip")
Expand-Archive ($_.BaseName + ".zip")
}
# get the images from the directories, then delete each directory
Get-ChildItem -Directory | ForEach-Object {
Copy-Item "$documents$_\word\media\*" $images
Remove-Item $documents$_ -Recurse -WhatIf
}
# restore the docx files
Get-ChildItem $documents *.zip | % {
Rename-Item $_ ($_.Basename + ".docx")
}