У меня есть более 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 ответ1

1

Вопрос относительно вашего текущего кода неясен, хотя Powershell является полезным инструментом для этой задачи.

Как следует из комментариев, если ваши файлы имеют формат .docx (не .doc), вы можете переименовать расширения файлов в .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")
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .