[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
# Настройки
$sourceDir = "Downloads_Bank_Docs"
$oldDocsDir = "Old_Doc_Files"
$convertedDir = "Converted_Docx_Files"
# Создаем папки, если их нет
if (!(Test-Path $oldDocsDir)) { New-Item -ItemType Directory -Path $oldDocsDir | Out-Null }
if (!(Test-Path $convertedDir)) { New-Item -ItemType Directory -Path $convertedDir | Out-Null }
Write-Host "--- 1. Ищу старые .doc файлы ---" -ForegroundColor Cyan
# Ищем строго .doc (игнорируя .docx)
$docFiles = Get-ChildItem -Path $sourceDir -Recurse -File | Where-Object { $_.Extension -eq ".doc" }
if ($docFiles.Count -eq 0) {
Write-Host "Старых .doc файлов не найдено! Можно расслабиться." -ForegroundColor Green
exit
}
Write-Host "Найдено старых файлов: $($docFiles.Count). Перемещаю..." -ForegroundColor Yellow
foreach ($file in $docFiles) {
Move-Item -Path $file.FullName -Destination $oldDocsDir -Force
}
Write-Host "`n--- 2. Запускаю скрытый Microsoft Word для конвертации ---" -ForegroundColor Cyan
try {
# Создаем COM-объект Word (запускаем его в фоне)
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$movedDocs = Get-ChildItem -Path $oldDocsDir -Filter "*.doc"
$count = 0
foreach ($doc in $movedDocs) {
$count++
Write-Host "[$count/$($movedDocs.Count)] Конвертирую: $($doc.Name)" -ForegroundColor White
$docPath = $doc.FullName
# Формируем новое имя с расширением .docx
$newPath = Join-Path (Resolve-Path $convertedDir).Path ($doc.BaseName + ".docx")
# Открываем файл
$document = $word.Documents.Open($docPath)
# 16 = wdFormatXMLDocument (это код формата .docx)
$document.SaveAs([ref]$newPath, [ref]16)
$document.Close()
}
Write-Host "`n--- ГОТОВО! ---" -ForegroundColor Green
Write-Host "Новые файлы .docx лежат в папке: $convertedDir" -ForegroundColor White
} catch {
Write-Host "`n[!] Ошибка при конвертации: $($_.Exception.Message)" -ForegroundColor Red
} finally {
# Обязательно закрываем Word, чтобы он не висел в памяти
if ($word) {
$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
}
}
Read-Host "Нажми Enter для завершения"